由于增强的for循环是只读的,因此似乎每个元素都被复制到设置循环时定义的新变量中。这里有隐式声明吗?也许是这样的:
int[] numbers = {1, 2, 3};
for(int number : numbers){
numbers = numbers[i]; // Implicit statement? Problem: the i variable does not exist.
// Do stuff...
}
答案 0 :(得分:4)
是的,确实,增强的for
循环处理在该块内创建了一个局部变量。对于阵列,每个JLS§14.4.2的增强for
循环与此等效:
增强的for语句等效于以下形式的基本for语句:
...
for (int #i = 0; #i < #a.length; #i++) { {VariableModifier} TargetType Identifier = #a[#i]; Statement }
(如果循环的目标是Iterable
而不是数组,则略有不同,但类似。)
将其应用于您的循环:
int[] numbers = {1, 2, 3};
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
// Do stuff...
}
您无法访问i
变量(在规范中列为#i
),但在字节码中就可以使用它。