其他答案对我不起作用。我的问题是关于整数。
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
我想让i1和i2相关。
答案 0 :(得分:6)
在java java.lang.Integer
中是不可变的。这意味着您无法更改Integer对象的值(以通常的方式)。您可以使用新值创建新的Integer
实例。
i1
和i2
包含对同一Integer
实例的引用。当你做了
i1 = 233;
这意味着i1
引用Integer
类
如果您希望i1
和i2
引用相同的实例,则可以使用AtomicInteger
,但AtomicInteger
是出于不同的目的。
AtomicInteger i1 = new AtomicInteger(11);
AtomicInteger i2 ;
i2 = i1;
System.out.println(i1+" "+i2);
i1.set(233);
System.out.println(i1+" "+i2);
或者你可以制作一个包装
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;
}
}
和代码
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());
答案 1 :(得分:2)
执行此操作时:i2 = i1;
java会自动为您i2 = new Integer(i1);
执行此操作,因为Integer
是不可变的。
答案 2 :(得分:1)
Java总是在分配新的整数文字时创建新对象,因为Integer是不可变的。
例如:
i1=233; // it represent as i1= new Integer(233);
现在i1
和i2
作为两个不同的物理地址。
答案 3 :(得分:0)
您遇到的问题是i1 = 233
更改了i1
引用的内存地址。
答案 4 :(得分:-1)
Autoboxing在这里发挥作用。当您分配
时i1=233;
它实际上是将其视为
i1= new Integer(233);
现在再次阅读代码。你的i2整数仍然指向包含11的对象,其中i1指向包含233的新对象。