首先看下代码,在心里想象一下运行结果:
public class TestInteger {
public static void main(String[] args) {
Integer a=new Integer(127);
Integer b=new Integer(127);
Integer a1=127;
Integer b1=127;
Integer a2=128;
Integer b2=128;
System.out.println("a==b: "+(a==b));
System.out.println("a1==b1: "+(a1==b1));
System.out.println("a2==b2: "+(a2==b2));
}
}
结果如下,看看是否与你想的答案一致:
下面我来简单的说一下我的理解:
首先来看运行结果的第一行,相必都没什么问题,不同的对象之间 == 肯定是不成立的,而运行结果的第二行和第三行明明只相差了一点点,为什么结果会是不一样?
因为当将介于-128~127之间的short,int整数和小于127的boolean,byte,char的数值赋值给Integer时会被包装到固定的对象中,接下来如果再将一样的数赋值给另一个Integer时则会将该Integer的存储地址指向之前的那个相同的数所处的地址。所指地址一样时 == 是肯定成立的。