自动装箱池
在Integer类的内部提供了自动装箱池技术,将-128到127之间的整数已经装箱完毕,当程序中使用该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。
预测以下代码的运行结果
public class IntegerTest {
public static void main(String[] args) {
Integer i1=128;//自动生成Integer对象
Integer i2=128;
Integer i3=new Integer(128);//新建对象
Integer i4=new Integer(128);
System.out.println(i1==i2);//比较地址
System.out.println(i1.equals(i2));//比较内容
System.out.println(i3==i4);//比较地址
System.out.println(i3.equals(i4));//比较值
}
}
结果为
当将128改为127时
public class IntegerTest {
public static void main(String[] args) {
Integer i1=127;//自动生成Integer对象
Integer i2=127;
Integer i3=new Integer(127);//新建对象
Integer i4=new Integer(127);
System.out.println(i1==i2);//比较地址 true
System.out.println(i1.equals(i2));//比较内容 true
System.out.println(i3==i4);//比较地址 false
System.out.println(i3.equals(i4));//比较值 true
}
}
结果如下:
当执行Integer i1=127时,将装箱池内值为127的对象的地址赋给了i1,执行Integer i2=127时,也指向了同一个对象,导致对i1、i2比较时,由地址相同导致结果为true。