首页 > 解决方案 > Java 增强 for 循环中的隐式语句

问题描述

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

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

标签: javaloopsforeach

解决方案


是的,确切地说,增强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


推荐阅读