下面的程序
public class IntegerTest
{
public static void main(String[] args)
{
Integer a1 = 100;
Integer a2 = 100;
System.out.println(a1==a2);
Integer b1 = 200;
Integer b2 = 200;
System.out.println(b1==b2);
}
}
输出的结果为:
为什么会出现这样的结果?
查看Integer中的源码就知道原因。
上面是一个Integer类中的内部类,是处理Integer的缓存,cache的大小为256,static块中是对cache赋值从-128(包含)~127(包含),所以上面的例子可以得出100在范围以内不会产生新的对象,直接返回缓存中的对象,200不在范围内会产生新的对象,注意Integer的缓存数据是不会被垃圾回收。
从该类的注释看也可以知道