Странный для каждого цикла java - PullRequest
0 голосов
/ 28 ноября 2018

Может кто-нибудь сказать мне, почему это работает?

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

Почему я могу установить 0 как i, но он все еще повторяется?

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Поскольку i не является управляющей переменной в этом цикле, это всего лишь одно из значений в массиве.Для JLS§14.4.2 , для массивов расширенный цикл 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;
}
0 голосов
/ 28 ноября 2018
for( int i : ints ) 

называется расширенным для цикла.Когда вы обрабатываете итеративно, как это, вы имеете дело с элементом итеративно, а не с индексом.

Вы можете прочитать это

для каждого элемента i {// do this;}

В вашем случае i не является индексом, это текущий элемент в итерируемой.

Итерируемая здесь не является экземпляром Итерируемой.В общем смысле любая коллекция, которая может быть повторена с использованием подобного этого.

0 голосов
/ 28 ноября 2018

i в данном случае это не индекс цикла, а значение текущего элемента массива.Поэтому его изменение не влияет на итерацию.

Это эквивалентно:

int[] ints = {1,2,3};
for (int index = 0; index < ints.length; index++) {
    int i = ints[index];
    System.out.println(i);
    i = 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...