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
今日推荐
周排行