包装器对象如何工作?

时间:2015-03-26 06:45:02

标签: java

代码段

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堆上会发生什么?

4 个答案:

答案 0 :(得分:3)

原因很简单,Wrapper类是不可变的。详细解释: -

Integer i1 = 400;
Integer i2 = i1;

现在i1i2指向同一个对象。

使用此i1++,创建一个新对象(值为401)并将其分配给i1,而i2仍然继续指向旧对象(值为400)。

答案 1 :(得分:1)

输出正确。这背后的原因是Integer不变性。

答案 2 :(得分:0)

是的,当然所有包装类都是不可变的。

答案 3 :(得分:0)

不是很难理解

i1++; 

装置

i1 = new Integer(i1.intValue()+1);