Integer inb = 2;//自动装箱
Integer inc = 2;
System.out.println(inb == inc );//输出true
Integer biga = 128;
Integer bigb = 128;
System.out.println(biga == bigb);//输出false

上面的代码来自李刚老师的书,应该注意其中的细节.

上面的输出与Integer的设计有关。

1.系统把一个-128~127之间的整数自动装箱成Integer实例,放入一个cache数组缓存起来。

2.如果以后把一个-128~127之间的整数自动装箱成一个Integer实例,实际上是直接指向对应的数组cache中的元素。

3.如果两个Integer实例的为同一个整数,实际上,它们引用的是cache数组中的同一个元素,所以它们相等,故(inb == inc)输出true。

4.如果把一个不在-128~127的整数装箱成Integer实例,此时系统总是会创建新的Integer实例,即两个Integer引用,我们知道‘==’作为实例对象的比较运算符时,其实比的是两个实例对象是否指向同一个对象,此时这两个Integer实例分别指向各自的实例对象,所以(biga == bigb)输出false。

以上的是我的理解!欢迎同学们指教、拍砖(请慢拍w_0005.gif)!