自动装箱和自动拆箱
Integer i1 = 1; //自动装箱,实际上执行了Integer.valueOf(1)
int i2 = i1; //自动拆箱,实际上执行了 int i2 = i1.intValue();
-128~127 的数
Integer i1 = 200;
Integer i2 = 200;
System.out.println("i1 == i2: " + (i1 == i2));
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3 == i4: " + (i3 == i4));
输出的结果是:
i1 == i2: false
i3 == i4: true
int 的自动装箱,是系统执行了 Integer.valueOf(int i),先看看Integer.java的源码:
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象)
所以范例中,i3 与 i4实际上是指向同一个对象。
而其他值,执行Integer.valueOf(int i) 返回的是一个新建的 Integer对象,所以范例中,i1与i2 指向的是不同的对象。
Integer i3 = new Integer(100);
Integer i4 = new Integer(100);
System.out.println("i3 == i4: " + (i3 == i4)); //false
int i = 10;
Double d = 20.0; //自动装箱 Double.valueOf(20.0D)
System.out.println(i+d); //自动拆箱 i + d.doubleValue()
Integer i = 10; //自动装箱 Integer.valueOf(10);
Double d = 20.0; //自动装箱 Double.valueOf(20.0D);
System.out.println(i+d); //自动拆箱 i.intValue() + d.doubleValue()