指向相同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