先看一个奇怪的程序:
class IntegerTest
{
public static void main(String[] args)
{
Integer integ1 = 100;
Integer integ2 = 100;
Integer integ3 = 200;
Integer integ4 = 200;
System.out.println(integ1 == integ2);
System.out.println(integ3 == integ4);
}
}
结果:
true
false
原因:在Integer的实现代码中,当int值在-128~127时,会存储在缓存中,因此integ1和integ2的内容都是缓存中缓冲好的;若int值超出这个范围,则不会操作缓存,重新定义一个Integer的对象。因此integ3和integ4其实是两个不同的对象引用。当使用new定义新的对象时,及时在-128~127之间的整数,也会产生两个不同的实例。