谁能告诉我,为什么它起作用?
int[] ints = {1,2,3};
for(int i : ints) {
System.out.println(i); i = 0;
}
为什么我可以将0设置为i,但是它仍然会迭代?
答案 0 :(得分:8)
由于i
不是该循环中的控制变量,因此它只是数组中的值之一。对于阵列,每个JLS§14.4.2的增强for
循环与此等效:
增强的for语句等效于以下形式的基本for语句:
...
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;
}
答案 1 :(得分:5)
i
不是循环的索引,它是数组当前元素的值。因此,更改它不会影响迭代。
等效于:
int[] ints = {1,2,3};
for (int index = 0; index < ints.length; index++) {
int i = ints[index];
System.out.println(i);
i = 0;
}
答案 2 :(得分:2)
for( int i : ints )
被称为for循环的增强。当您像这样处理可迭代对象时,您将在可迭代对象中处理元素,而不是索引。
您可以阅读
对于每个元素i {//这样做; }
在您的情况下,i
不是index,它是可迭代的当前元素。
iterable在这里不是Iterable的实例。从一般意义上讲,任何可以像这样迭代的集合。