操纵整数对象而不创建新实例?

时间:2019-03-07 19:17:10

标签: java integer mutability

我有:

.

所以我的目标是通过具有相同引用的另一个对象来操纵我,而无需切换引用。而且不要说“为什么不使用整数,或者为什么不直接与我搞混”。这不是本练习的目的。总是有更简单的方法来做事情,但这就是我应该处理的事情。最后一个问题...这是否意味着Integer对象是不可变的?

2 个答案:

答案 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