`

JavaTip

阅读更多

1. 打包和拆包

Integer a = 1000;
Integer b = 1000;
if (a == b) ...

    a == b, 有可能成立。如果将经常出现的值包装到同一个对象中,这种比较就有可能成立。解决这个问题的办法是在比较两个包装器对象时调用equals方法。

 

    自动打包规范中要求当 boolean、char( 小于等于 127)、(byte、short、int: (介于 -128 ~ 127 之间))时,它们被包装到固定对象中。例如,如果在上面的代码中,如果a和b初始化为100,那么,对它们进行的比较则一定成立。

 

// 以下三个方法可以解释Tip1的行为。
// 第三个方法是为了说明显示的实例化两个Integer对象,它们肯定不会是同一的。

// java.lang.Integer 类中的静态内部类
private static class IntegerCache {
    private IntegerCache(){}

    static final Integer cache[] = new Integer[-(-128) + 127 + 1];

    static {
        for(int i = 0; i < cache.length; i++)
            cache[i] = new Integer(i - 128);
    }
}

// 打包
public static Integer valueOf(int i) {
    final int offset = 128;
    if (i >= -128 && i <= 127) { // must cache 
        return IntegerCache.cache[i + offset];
    }
    return new Integer(i);
}

// 创建实例
public Integer(int value) {
    this.value = value;
}


 

 

    注意,打包和拆包是编译器认可的,而不是虚拟机。

 

 

 

2. 整型溢出(基本数据类型的变窄转换)

  int   i   =   1000000;  
  System.out.println(i*i);  
 
 // result:   -727379968  
  

 
    合理解释和过程应该是这样的:  
    i设置为1000000,在乘方时Java发现结果(1000000000000)已经超出了int基本数据类型的最大范围(2147483647),于 是作了默认的类型提升(type   promotion),中间结果做为long类型存放,返回结果时目标数据类型int不能够容纳下结果,于是根据Java的基础类型的变窄转换 (Narrowing   primitive   conversion)规则,把结果宽于int类型宽度的部分全部丢弃,也就是只取结果的低32位,于是就得到了上面的结果。  
   下面用一个十六进制表示的例子阐释这个问题

 

int   i3   =   1000000;  
System.out.println   (Long.toHexString(i3*i3).toUpperCase());  
System.out.println   (Long.toHexString(i3*i3).toUpperCase());  
System.out.println   (Integer.toHexString(i3*i3).toUpperCase());  
System.out.println   ((int)i3*i3);  
 
// result: 
// FFFFFFFFD4A51000  
// 1000000000000  
// D4A51000  
// -727379968    

   截取是非常直观的 .

 


3. 精度

    JAVA中浮点数值不适用于禁止出现舍入误差的金融计算中。例如,System.out.println(2.0 - 1.0) 将打印出0.899999999999999,而不是0.9。其主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10,就像十进制无法精确的表示1/3一样。如果需要在数值计算中不含有任何舍入误差,就应该使用BigDecimal类。

 

4. char

分享到:
评论

相关推荐

    jdCheeseFive_java_tip3ja_

    【标题】"jdCheeseFive_java_tip3ja_" 指的是一款基于Java语言开发的简单双人对战五子棋游戏。这个项目可能是为了帮助开发者或者爱好者在没有实体棋盘的情况下,能与朋友通过电脑进行游戏消遣,且由于不需要网络联机...

    java实现的小费计算器

    总的来说,`java Tip 小费`标签提示这是一个关于Java编程、小费计算逻辑和可能涉及的GUI设计的学习资源。对于初学者来说,这个项目不仅有助于巩固基础知识,还能让他们接触到实际应用中的问题解决,如调整过时的XML...

    Java balloon Tip Tool

    Java Balloon Tip Tool 是一个基于Java编程语言的实用工具,主要用于在用户界面上显示临时性的提示信息,类似于操作系统中的气泡提示。这种工具通常用于快速传递简短的通知或信息,而不打断用户的正常工作流程。在...

    Reflect on the Visitor design pattern

    在Java Tip 98中,作者Jeremy Blosser通过一个简单的例子展示了如何使用访问者模式处理集合中的不同类型的对象。问题在于,当集合包含多种不同类型的元素时,如何优雅地执行特定的操作。传统的做法是遍历集合并根据...

    Java balloon Tip Tool (transparent-window)

    Java Balloon Tip Tool 是一个Java开发的工具,用于创建具有透明窗口效果的提示信息,通常在用户界面设计中用于提供轻量级的通知或提示。这个工具的独特之处在于它利用了Java图形库的能力来实现气球形状的提示框,...

    tiptop导入java的JAR包.docx

    tiptop导入java的JAR包.docx

    asialiugf#blogs#java_tip小点1

    1.Java保存的文件名必须与类名一致 2.如果文件中只有一个类,文件名必须与类名一致 3.一个Java文件中只能有一个public类 4.如果文件中不止一个类

    tiptop 内部培训资料

    tiptop 4gl CR 公司内部开发技术文档资料,tiptop 4gl CR 公司内部开发技术文档资料tiptop 4gl CR 公司内部开发技术文档资料。

    TIPTOP 调用其他系统的通用Java完整项目源码

    通过java开发作为桥梁(jar包)导入去实现TIPTOP调用其他系统的Webservice集成,主要是解决TIPTOP ERP调用其他系统的接口进行的集成开发,也就是当ERP作为客户端时候,它如何去调用其他系统的Webservice地址进行ERP...

    500个JAVA(英文)

    《500个JAVA(英文)》是一本专注于Java编程技术的英文图书,包含了丰富的编程技巧和实践指导。这本书以500个独立的提示、技巧和最佳实践为框架,旨在帮助开发者提升Java编程能力,解决实际开发中遇到的问题。通过...

    TIPTOP ERP不完全实施开发手册.chm

    TIPTOP ERP不完全实施开发手册,里面有常用linux命令,TIPTOP、JAVA、jsp、oracle常用命令

    一个动态的Tip的实现

    标题中的“一个动态的Tip的实现”指的是在软件开发中创建一种动态提示信息的技术。Tip通常是指在用户界面上短暂显示的小型信息框,用于提供额外的帮助或指示。动态Tip意味着它可以根据用户的交互或者特定条件实时...

    500 Java Tips

    这500个Java Tips覆盖了Java开发的多个方面,从基础语法到高级特性和框架应用,每一个Tip都是一个宝贵的实践经验,值得每个Java开发者深入研究和实践。通过学习这些Tips,你可以不断提升自己的编程水平,写出更高效...

    Amazon Interview Prepare tip

    以下是对“Amazon Interview Prepare tip”这一主题的深入解析,旨在为即将参加亚马逊技术面试的候选人提供全面的指导和建议。 ### 面试理念与公司文化 首先,亚马逊强调其作为一个“建造者可以建造的地方”,这里...

    TIPTOP與其他系統之WebService接口資料

    1. 开发工具:开发者可以使用诸如Apache Axis、wsimport(Java)、Visual Studio(.NET)等工具自动生成客户端代码,简化调用Web Service的过程。 2. 测试:接口开发完成后,需进行单元测试和集成测试,确保服务能...

    表单验证TIP

    后端语言如PHP、Python、Java等都有成熟的库或框架支持,如PHP的Laravel的Validator类,Python的Django的Form验证,Java的Spring Boot的Validated注解。 总的来说,表单验证TIP是提升用户交互体验的关键元素,通过...

    yelp_academic_dataset_tip.json

    一些使用的数据,可以用于测试java程序

    TIPTOP销售系统管理.pdf

    TIPTOP销售系统管理.pdf

    21天学会Java 0基础学Java

    - **注释与提示**:书中穿插有各种注释框,如“Note”、“Technical Note”、“Tip”、“Caution”、“Warning”,这些内容旨在加深理解、避免常见错误,并提供实用建议。 - **在线资源**:除了纸质书籍外,本书还...

Global site tag (gtag.js) - Google Analytics