Java中的隐式语句增强了for循环

时间:2018-11-30 13:22:21

标签: java loops foreach

由于增强的for循环是只读的,因此似乎每个元素都被复制到设置循环时定义的新变量中。这里有隐式声明吗?也许是这样的:

int[] numbers = {1, 2, 3};
for(int number : numbers){
  numbers = numbers[i]; // Implicit statement?  Problem: the i variable does not exist.
  // Do stuff...
}

1 个答案:

答案 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),但在字节码中就可以使用它。