浅拷贝Java中的整数

张泽栋*_*张泽栋 2 java variables

其他答案对我不起作用.我的问题是关于整数.

Integer i1 = new Integer(11);
Integer i2 ;
i2 = i1;
System.out.println(i1+"   "+i2);
i1 = 233;
System.out.println(i1+"   "+i2);
//~ 11    11
//~ 233    11
Run Code Online (Sandbox Code Playgroud)

我想让i1和i2相关.

Vad*_*deg 6

在java中java.lang.Integer是不可变的.这意味着您无法更改Integer对象的值(以通常的方式).您可以Integer使用新值创建新实例.

i1i2包含对同一Integer实例的引用.当你做的时候

i1 = 233;
Run Code Online (Sandbox Code Playgroud)

它意味着i1引用另一个Integer类的实例

如果你想要它i1i2引用你可以使用的同一个实例AtomicInteger,但它AtomicInteger是为了不同的目的而制作的.

AtomicInteger i1 = new AtomicInteger(11);
AtomicInteger i2 ;
i2 = i1;
System.out.println(i1+"   "+i2);
i1.set(233);
System.out.println(i1+"   "+i2);
Run Code Online (Sandbox Code Playgroud)

或者你可以做一个包装

public static class IntegerWrapper {

    private int value;

    public IntegerWrapper(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public IntegerWrapper setValue(int value) {
        this.value = value;
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

和代码

IntegerWrapper i1 = new IntegerWrapper(11);
IntegerWrapper i2 ;
i2 = i1;
System.out.println(i1.getValue()+"   "+i2.getValue());
i1.setValue(233);
System.out.println(i1.getValue()+"   "+i2.getValue());
Run Code Online (Sandbox Code Playgroud)