“ final int i”如何在Java for循环内部工作?

问题描述

想象一下,速记看起来很像这样:

for (Iterator<Integer> iter = listofNumbers.iterator(); iter.hasNext(); )
{
    final int i = iter.next();
    {
        System.out.println(i);
    }
}

解决方法

我很惊讶地看到下面的Java代码片段已编译并运行:

for(final int i : listOfNumbers) {
     System.out.println(i);
}

其中listOfNumbers是整数数组。

我以为最终声明只分配了一次。编译器是否正在创建Integer对象并更改其引用?