有人能告诉我,它为什么有效吗?
为什么我可以将i设置为0,但它仍然进行迭代?
int[] ints = {1,2,3};
for(int i : ints) {
System.out.println(i); i = 0;
}
为什么我可以将i设置为0,但它仍然进行迭代?
由于在该循环中i
不是控制变量,而只是数组中的一个值。 根据JLS§14.4.2,对于数组,增强型for
循环等效于以下代码:
The enhanced for statement is equivalent to a basic for statement of the form:
...
for (int #i = 0; #i < #a.length; #i++) { {VariableModifier} TargetType Identifier = #a[#i]; Statement }
那么将其应用于您的循环:
int[] ints = {1,2,3};
for (int index = 0; index < ints.length; index++) {
int i = ints[index];
System.out.println(i);
i = 0;
}
i
在这种情况下不是循环的索引,而是数组当前元素的值。因此更改它不会影响迭代过程。
等同于:
int[] ints = {1,2,3};
for (int index = 0; index < ints.length; index++) {
int i = ints[index];
System.out.println(i);
i = 0;
}
for( int i : ints )
i
不是索引,而是可迭代对象中的当前元素。ints
不是可迭代的,它是一个数组(这很重要,因为实际上有两个增强型的for
循环,一个用于可迭代对象,另一个用于数组)。 - T.J. Crowder