我正在阅读Kathy Sierra和Bert Bates编写的SCJP Java 6,这本书让我非常困惑。在第245页上,他们声明以下代码。
Integer i1 = 1000; Integer i2 = 1000; if(i1 != i2) System.out.println("different objects"); //Prints output different objects
然后在下一页上,它们具有以下代码
Integer i3 = 10; Integer i4 = 10; if(i3 == i4) System.out.println("same objects"); //Prints output same objects
我很困惑!当我自己尝试该方法时,似乎无法使用==来比较使用equals()方法的方式。即使Integer变量设置为相同的值(即10),使用==总是给我’false’。我对么?使用==比较相同的Integer对象(具有相同的值)将始终导致’false’
答案的关键是对象实习。Java会实习小的数字(少于128个),因此in范围内所有Integer(n)with的实例n都是相同的。大于或等于128的数字不会被插入,因此Integer(1000)对象彼此不相等。
Integer(n)with
Integer(1000)