我有:
.
所以我的目标是通过具有相同引用的另一个对象来操纵我,而无需切换引用。而且不要说“为什么不使用整数,或者为什么不直接与我搞混”。这不是本练习的目的。总是有更简单的方法来做事情,但这就是我应该处理的事情。最后一个问题...这是否意味着Integer对象是不可变的?
答案 0 :(得分:2)
实际上,所有基元(int,boolean,double等)及其各自的Wrapper类都是不可变的。
无法使用后递增运算符j++
来更改i的值。
这是因为j++
转换为j = j + 1
,并且赋值运算符=
意味着i和j不再引用同一对象。
您可以做的是使用一个int数组(或Integer,无论您喜欢什么)。您的代码将如下所示:
int i[] = {5};
int j[] = i;
j[0]++;
System.out.println(i[0]); // prints 6
但是不建议这样做。我认为您应该将自己的wrappe类用于可能看起来像这样的int
public class MutableInt
private int i;
public MutableInt(int i) {
set(i);
}
public int get() {
return i;
}
public void set(int i) {
this.i = i;
}
public void increment() {
i++;
}
// more stuff if you want to
请注意,您将无法通过这种方式使用自动装箱,并且没有java.lang.Integer
这样的缓存
答案 1 :(得分:1)
您可以使用AtomicInteger完成此操作
AtomicInteger i = new AtomicInteger(5);
AtomicInteger j = i;
j.addAndGet(1);
System.out.println(i); //6
System.out.println(j); //6