奇怪的for-each循环Java

时间:2018-11-28 07:21:00

标签: java loops foreach

谁能告诉我,为什么它起作用?

int[] ints = {1,2,3};
for(int i : ints) {
System.out.println(i); i = 0;
}

为什么我可以将0设置为i,但是它仍然会迭代?

3 个答案:

答案 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的实例。从一般意义上讲,任何可以像这样迭代的集合。

相关问题