如何在foreach循环中使用最终变量

Muh*_*ana 4 java foreach final

考虑一下这段代码

public static void main(String[] args) {
    for(final String s : Arrays.asList("a","b","c")){
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码不是用于特定目的,而是用于演示final foreach-loop变量的用法.

这是如何运作的 ?如何在单个变量中为final每个循环分配不同的值.或者这个变量在不同的范围\堆栈中多次声明?

Oli*_*rth 5

这在Java语言规范(JLS),14.14.2中进行了解释:

增强的for语句具有以下形式:

EnhancedForStatement:
    for ( FormalParameter : Expression ) Statement

FormalParameter:
    VariableModifiers_opt Type VariableDeclaratorId

VariableDeclaratorId:
    Identifier
    VariableDeclaratorId []
Run Code Online (Sandbox Code Playgroud)

...

增强的for语句相当于表单的基本for语句:

for (I #i = Expression.iterator(); #i.hasNext(); ) {
    VariableModifiers_opt TargetType Identifier =
        (TargetType) #i.next();
    Statement
}
Run Code Online (Sandbox Code Playgroud)

因此,Identifier在循环的每次迭代中重新声明.