integer 整数缓冲区
public class Text08 {
public static void main(String[] args) {
//面试题
Integer integer1=new Integer(100);
Integer integer2=new Integer(100);
System.out.println(integer1==integer2);//结果为false
Integer integer3=100;//自动装箱:反编译后实际上可知调的是Integer.valueof()方法
Integer integer4=100;
System.out.println(integer3==integer4);//结果为true
Integer integer5=200;//自动装箱
Integer integer6=200;
System.out.println(integer5==integer6);//这个结果为什么为false,这里的原理与integer1和integer2一样,new了一个新的对象
}
}
Text08类反编译后的源码,注意观察integer3-6的结构:
public class Text08
{
public Text08()
{
}
public static void main(String args[])
{
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1 == integer2);
Integer integer3 = Integer.valueOf(100);
Integer integer4 = Integer.valueOf(100);
System.out.println(integer3 == integer4);
Integer integer5 = Integer.valueOf(200);
Integer integer6 = Integer.valueOf(200);
System.out.println(integer5 == integer6);
}
}
其中valueOf()方法的源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}