无法更改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
,这样可行。但我想知道这是否必要。
答案 0 :(得分:13)
否: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;
}
}
答案 1 :(得分:6)
你不能,因为它在设计上是不可变的。
您可以设置int[]
或Integer[]
或AtomicInteger
答案 2 :(得分:3)
一旦分配,你就不能改变final
整数的值。但是,你可以延迟分配。,即: - 你只能分配一个final
整数..你可以这样做在声明时,或在初始化程序块中,或在构造函数中。
答案 3 :(得分:2)
您可以将Integer包装在另一个最终的对象中,然后将另一个包装器对象中的Integer“替换”。