示例代码:
@Test public void testEquals() { Integer a = 127; Integer b = 127; if(a == b) { System.out.println(true); } else { System.out.println(false); } a = 128; b = 128; if(a == b) { System.out.println(true); } else { System.out.println(false); } //打印结果: //true //false }
找到的相关解释如下:
因为java在执行包装类的自动装箱功能时,对于-128到127之间的整数被装箱为Interger对象后,该对象会被另外一个对该证书进行自动装箱的操作重复使用,也就是说多次对同一个-128到127范围内的整数进行Integer装箱的操作,使用的都是第一次进行装箱操作时生成的对象。而对于大于127的整数,就会new一个新对象,两个对象使用==比较由于地址不同所以返回false。