奇怪的每个循环java

alq*_*een 3 java foreach loops

谁能告诉我,它为什么有效?

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

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

T.J*_*der 8

因为i该循环中不是控制变量,所以它只是数组中的一个值.根据JLS§14.4.2,对于数组,增强型for循环等效于:

增强的for语句相当于表单的基本for语句:

...

for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}
Run Code Online (Sandbox Code Playgroud)

所以将它应用于你的循环:

int[] ints = {1,2,3};
for (int index = 0; index < ints.length; index++) {
    int i = ints[index];
    System.out.println(i);
    i = 0;
}
Run Code Online (Sandbox Code Playgroud)


Era*_*ran 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;
}
Run Code Online (Sandbox Code Playgroud)

  • @TJCrowder我实际上没有为长度选择变量.至于`index`,我们不能使用`i`,是吗?:) (2认同)