更改最终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“替换”。