java中包装类的比较用法

java中包装类的比较用法

一、前言
java中 ,包装类是一个对象,也是一个具体的数值。对于对象比较可以用 equals()方法,对于数值的比较可以用 == 进行比较,那么对于包装类该用那种方法比较合适呢?


二、实验代码如下
        Integer a1=120;
        Integer b1=120; 
        System.out.println(a1==b1); // true
        System.out.println(a1.equals(b1)); // true
        System.out.println("<-------分割线 1----------->");
         
        Integer a2=133;
        Integer b2=133;
        System.out.println(a2==b2); // false 注意这个结果不一样。
        System.out.println(a2.equals(b2)); // true
        System.out.println("<-------分割线 2----------->");

三、原因分析
1、通过实验代码可以看到, a2 == b2 的结果与 a1==b1 结果不一样。
 2、 使用java反编译工具,对代码反编译可以看到:( java反编译工具下载
原代码: Integer a1=120;
编译后: Integer a1 = Integer.valueOf(120); 
说明了,包装类在进行直接赋值的时候,底层调用的是 Integer.valueOf()方法,通过查看JDK源码:


3、可以看到,从jdk1.5开始,Integer提供了一个内部类,IntegerCache , 数值范围在 Integer 
(-128 ~ 127)之间(byte 类型的范围 ),是不会新建对象,调用的是数据缓冲池中的值。

四、最终结论

总结: 在byte类型范围内, 包装类用 == 和 equals()方法比较值是一样的, 超出byte范围, == 即使数值结果
一样,但是 == 返回的false,因为 Integer 底层新建了对象,不是同一个地址值。

结论: java中包装类请使用 equals()方法进行比较!



相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页