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