代码段
public class WrapperClass {
public static void main(String[] args) {
Integer i1 = 400;
Integer i2 = i1;
i1++;
System.out.println(i1 + " " + i2);
}
}
输出为401 400
。我不确定包装器对象是如何工作的。 Arent i1和i2指向同一个对象?当上面的代码执行时,Java堆上会发生什么?
答案 0 :(得分:3)
原因很简单,Wrapper类是不可变的。详细解释: -
Integer i1 = 400;
Integer i2 = i1;
现在i1
和i2
指向同一个对象。
使用此i1++
,创建一个新对象(值为401)并将其分配给i1
,而i2
仍然继续指向旧对象(值为400)。
答案 1 :(得分:1)
输出正确。这背后的原因是Integer
不变性。
答案 2 :(得分:0)
是的,当然所有包装类都是不可变的。
答案 3 :(得分:0)
不是很难理解
i1++;
装置
i1 = new Integer(i1.intValue()+1);