我对java中的自动装箱拆箱感到困惑。请参阅我的以下两个程序。
Integer x = 400;
Integer y = x;
x++; x--;
System.out.println((x==y));
The output is false.
I known why the output is false. Because of autoboxing x.
Integer x = 100;
Integer y = x;
x++; x--;
System.out.println((x==y));
The output is true.
But the program is same as the upper. Why the output is true?
Please explain me detail.
非常感谢。
答案 0 :(得分:1)
这是因为Integers -128到127被缓存,所以在第二个例子中,x和y引用相同的Integer实例。
Integer x = 100; // x refers to cached 100
x++;
相当于
int var = x.intValue();
var++;
x = Integer.valueOf(var); // returns cached 100
请参阅Integer.valueOf(int)API。