在增强型 for 循环中使用 final 对循环变量使用 end 的目的是什么?

2022-09-01 17:00:54

我理解以下声明的工作原理。

for(final Animal animal : animalList){
//do some function
}

但是在这里使用最终关键字的目的是什么?


答案 1

这样做有两个可能的原因:

  • 它可能只是一种避免在循环体中意外更改循环变量的方法。(或者记录循环变量不会被更改的事实。

  • 可以这样做,以便您可以引用匿名内部类中的循环变量。例如:

    for(final Animal animal : animalList){
        executor.submit(new Runnable(){
            public void run() {
                animal.feed();
            }
        });
    }
    

    如果省略此示例中的 ,则会出现编译错误。final

    更新 它不是Java 8及更高版本中的编译错误。非局部变量现在只需要有效地最终变量。简单来说,这意味着在初始声明/初始化后,变量未赋值(使用赋值运算符或前/后增量或递减运算符)。


答案 2

在此处添加关键字不会对性能产生任何影响。它只需要确保它不会在循环中重新分配。final

避免这种情况可能导致混乱。

 for(Animal animal : animalList){
       //do some function
       animal = anotherAnimal;
       // use animal variable here
    }

您可能还需要在循环内的匿名函数中使用此变量