Я знаю, что на этот вопрос уже дан ответ, но подумал, что может помочь другое объяснение.
Другой способ проиллюстрировать это:
++i
даст результат new i
,i++
выдаст результат исходного i
и сохранит new i
для следующего действия.
Можно подумать об этом, делая что-то еще внутри выражения.Когда вы печатаете текущее значение i
, оно будет зависеть от того, было ли i
изменено в выражении или после выражения.
int i = 1;
result i = ++i * 2 // result = 4, i = 2
i
оценивается (изменяется) доРезультат рассчитан.Печать i
для этого выражения показывает измененное значение i
, используемое для этого выражения.
result i = i++ * 2 // result = 2, i = 2
i
оценивается после вычисления результата.Таким образом, печать i
из этого выражения дает исходное значение i
, используемое в этом выражении, но i
все еще изменяется для любого дальнейшего использования.Таким образом, печать значения для i
сразу после выражения покажет новое увеличенное значение i
.Поскольку значение i
изменилось, независимо от того, напечатано оно или используется.
result i = i++ * 2 // result = 2, i = 2
System.out.println(i); // 2
Если вы сохранили согласованный шаблон и включили строки печати для всех значений:
int i = 3;
System.out.println(i); // 3
System.out.println(i++); // 3
System.out.println(i); // "4"
System.out.println(++i); // 5
System.out.println(i); // "5"
System.out.println(++i); // "6"
System.out.println(i++); // "6"
System.out.println(i); // "7"