我了解以下语句的工作原理。
for(final Animal animal : animalList){
//do some function
}
但是在这里使用 final 关键字的目的是什么?
这样做有两个可能的原因:
它可能只是一种避免在循环体中意外更改循环变量的方法。(或记录循环变量不会被更改的事实。)
可以这样做,以便您可以在匿名内部类中引用循环变量。例如:
for(final Animal animal : animalList){
executor.submit(new Runnable(){
public void run() {
animal.feed();
}
});
}
如果您final
在此示例中省略了,则会出现编译错误。
更新它不是 Java 8 及更高版本中的编译错误。非局部变量现在只需要有效 final。简而言之,这意味着在初始声明/初始化之后没有将变量分配给(使用赋值运算符或前/后递增或递减运算符)。
添加final
关键字在这里没有性能差异。只需要确保它没有在循环中重新分配。
为了避免这种可能导致混乱的情况。
for(Animal animal : animalList){
//do some function
animal = anotherAnimal;
// use animal variable here
}
您可能还需要在循环内的匿名函数中使用此变量
它只是意味着animal
一旦被 for 循环设置,它的值就不能改变。如果您要animal
在循环中的某个点在匿名类中引用,则可能需要这样做。
即使没有明确需要,最好将变量设为最终变量。它可以帮助您发现错误,并使代码更具自我记录性。
该代码是此等效代码的语法糖:
for (final Iterator<Animal> iterator = animals.iterator(); iterator.hasNext(); ) {
final Animal animal = iterator.next();
}
我认为它回答了这个问题。