Kri*_*tal 20 java variables foreach final
我理解以下声明是如何工作的.
for(final Animal animal : animalList){
//do some function
}
Run Code Online (Sandbox Code Playgroud)
但是在这里使用final关键字的目的是什么?
Ste*_*n C 31
这样做有两个可能的原因:
它可以简单地避免在循环体中意外更改循环变量.(或者记录循环变量不会被更改的事实.)
可以这样做,以便您可以在匿名内部类中引用循环变量.例如:
for(final Animal animal : animalList){
executor.submit(new Runnable(){
public void run() {
animal.feed();
}
});
}
Run Code Online (Sandbox Code Playgroud)
如果您final在此示例中省略,则是编译错误.
更新它不是Java 8及更高版本中的编译错误.现在,非局部变量只需要有效最终.简单来说,这意味着在初始声明/初始化之后,变量未分配给(使用赋值运算符或前/后递增或递减运算符).
添加final关键字在这里没有性能差异.只需要确保它不会在循环中重新分配.
避免这种可能导致混淆的情况.
for(Animal animal : animalList){
//do some function
animal = anotherAnimal;
// use animal variable here
}
Run Code Online (Sandbox Code Playgroud)
您还可能需要在循环内的匿名函数中使用此变量