自动装箱、拆箱
看完了包装类型的便捷性后,我们再来落实到自动装箱、自动拆箱上...
怎么就自动装箱,自动拆箱了呢?
上一段代码,看看哪是自动装箱跟自动拆箱:
// 自动装箱
Integer a = 100;
// 自动拆箱
int b = a;
自动装箱,相当于Java编译器替我们执行了 Integer.valueOf(XXX);
自动拆箱,相当于Java编译器替我们执行了Integer.intValue(XXX);
看完编译器替我们做的,接下来我们再通过源码看看,首先是自动装箱 valueOf()
方法:
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
具体说明
Integer i1 = 40;//自动装箱 Integer i2 = new Integer(40);//通过new关键字会创建对象 System.out.println(i1==i2);//输出 false
一些例子
Integer i1 = 40; Integer i2 = 40; Integer i3 = 0; Integer i4 = new Integer(40); Integer i5 = new Integer(40); Integer i6 = new Integer(0); System.out.println("i1=i2 " + (i1 == i2)); System.out.println("i1=i2+i3 " + (i1 == i2 + i3)); System.out.println("i1=i4 " + (i1 == i4)); System.out.println("i4=i5 " + (i4 == i5)); System.out.println("i4=i5+i6 " + (i4 == i5 + i6)); System.out.println("40=i5+i6 " + (40 == i5 + i6));
结果
i1=i2 true i1=i2+i3 true i1=i4 false i4=i5 false i4=i5+i6 true 40=i5+i6 true
解释
语句"i4 == i5 + i6",因为"+"不适合对象操作,所有进行自动拆箱,即"i4 == 40",然后对象无法于数值比较,然后"i4"自动拆箱为40,即"40==40"
标签:拆箱,i1,i5,i4,40,自动,Integer,装箱 From: https://www.cnblogs.com/happy12123/p/16842770.html