【发布时间】:2019-05-10 14:24:29
【问题描述】:
这个问题类似于Lambdas: local variables need final, instance variables don't,但唯一的区别是这个问题即使没有 lambda 表达式也有效,即即使在 Java7 上也有效。
这是下面的代码sn-p。
public class MyClass {
Integer globalInteger = new Integer(1);
public void someMethod() {
Integer localInt = new Integer(2);
Runnable runnable = new Runnable() {
@Override
public void run() {
globalInteger = new Integer(11);//no error
localInt = new Integer(22);//error here
}
};
}
}
我可以为 globalInteger 重新分配一个新值,但不能给 localInteger。为什么会有这种差异?
【问题讨论】:
-
考虑一个实例字段等同于
this.field = newValue这就像someLocalVar.field = newValue一样工作。但考虑包含一段说明性的代码,这样更容易获得真正的答案。 -
请提供示例代码。
-
我已经添加了代码sn-p
-
globalInteger = 11;是this.globalInteger = 11;的简写,但localInt只是值的副本,不能更改原始值。
标签: java lambda anonymous-inner-class