更改最终Integer变量的值

final对象无法更改,但我们可以设置其属性:

 final MyClass object = new MyClass(); object.setAttr("something"); //<-- OK object = someOtherObject; //<-- NOT OK 

是否可以对final Integer执行相同的操作并更改其int值?

我问,因为我打电话给工人:

 public SomeClass myFunction(final String val1, final Integer myInt) { session.doWork(new Work() { @Override public void execute(...) { //Use and change value of myInt here //Using it requires it to be declared final (same reference) } } 

我需要在其中设置myInt的值。

我可以在另一个类中声明我的int ,这样可行。 但我想知道这是否必要。

否: Integer是不可变的,就像String

但是你可以设计自己的类来嵌入一个整数并使用它而不是整数:

 public class MutableInteger { private int value; public MutableInteger(int value) { this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } 

你不能因为它不可变的设计。

您可以设置int[]Integer[]AtomicInteger

分配后不能更改final整数的值。但是,您可以延迟赋值。即: – 您只能分配一次final整数..您可以在声明时或初始化块中执行此操作,或在构造函数..

您可以将Integer包装在另一个最终的对象中,然后将另一个包装器对象中的Integer“替换”。