Я просто хотел создать небольшую Java-Puzzle, но я озадачил себя. Одна часть головоломки:
Что делает следующий фрагмент кода:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
Он выводит 9
.
Мое (по крайней мере частично) неправильное объяснение:
Я не совсем уверен, но я думаю, что термин после i +=
оценивается следующим образом:
Итак,
int i = 1;
i += ++i + i++ + ++i;
совпадает с
int i = 1;
i += ((++i) + (i++)) + (++i);
Это оценивается слева направо (см. Предварительная и постинкрементная оценка java).
Первый ++i
увеличивает i
на 2
и возвращает 2
. Итак, у вас есть:
i = 2;
i += (2 + (i++)) + (++i);
i++
возвращает 2
, так как это новое значение i
, и увеличивает i
на 3
:
i = 3;
i += (2 + 2) + ++i;
Второй ++i
увеличивает i
до 4
и возвращает 4
:
i = 4;
i += (2 + 2) + 4;
Итак, вы получите 12
, а не 9
.
Где ошибка в моих объяснениях? Что было бы правильным объяснением?