指向相同Integer对象的变量之间的比较


问题内容

当前程序的输出为“奇怪”。但是,两个变量共享相同的参考。为什么第二次和第三次比较不正确?

Integer a;
Integer b;
a = new Integer(2);
b = a;
if(b == a) {
    System.out.println("Strange");
}
a++;
if(b == a) {
    System.out.println("Stranger");
}
a--;
if(b == a) {
    System.out.println("Strangest");
}

输出: Strange


问题答案:

这就是自动装箱的产物,并且Integer在Java中是不可变的。

a++a--被翻译成大致是这样的。

int intA = a.getInt( );
intA++;
a = Integer.valueOf( intA ); // this is a reference different from b