关于自动拆装箱时的陷阱

 1 /*
 2  * 自动装箱的陷阱
 3  * 1、两个包装类进行比较时,包装类的"=="运算在不遇到算术运算的情况下不会自动拆箱,如下例若判断c==g则会报编译错误;
 4  * 2、两个包装类进行比较时, 包装类的"equals()"方法不处理数据转型的关系,如下例的g.equals(a+b)为false;
 5  * 3、对于Integer类,当值在-128-127之间时,会使用Integer.ValueOf()方法直接从缓存中取出相应对象,
 6  * 而当值不在这个范围内时会使用Integer.ValueOf()方法new一个Integer对象,如下例的e和f不是同一个对象
 7  * 的引用,而c和d是同一个对象的引用。
 8  */
 9 public class AutomaticPackingTest {
10     
11     public static void main(String[] args) {
12         Integer a = 1;
13         Integer b = 2;
14         Integer c = 3;
15         Integer d = 3;
16         Integer e = 321;
17         Integer f = 321;
18         Long g = 3L;
19         int h = 321;
20         int i = 321;
21         
22         System.out.println(c==d);
23         System.out.println(e==f);
24         System.out.println(e.equals(f));
25         System.out.println(h==i);
26         System.out.println(i==e);
27         System.out.println(c==(a+b));
28         System.out.println(c.equals(a+b));
29         System.out.println(g==(a+b));
30         System.out.println(g.equals(c));
31         System.out.println(g.equals(a+b));
32     }
33 
34 }

运行结果
 

猜你喜欢

转载自www.cnblogs.com/zhangyu-720/p/9976021.html