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。
转载于:https://blog.51cto.com/carryon1981/1272889