Я не думаю, что это проблема из-за незнания того, как работает унарный оператор postfix ( expr ++). Именно порядок, в котором оцениваются утверждения, создает путаницу.
int i = 1;
System.out.println(i += i++); // Output: 2
Таким образом, последнее утверждение совпадает со следующими двумя утверждениями в следующем порядке:
i++; // i is now 2 for the rest of this statement and the program
i = 1 + 1; // i is assigned again
Таким образом, оператор постфикса вычисляется сначала, а затем оценивается вся строка, но с использованием предыдущего значения i.
Итак, чтобы использовать другой пример, который прояснил бы это:
int i = 2;
System.out.println(i += i++); // Output: 4
System.out.println(i); // Output: 4
И еще один пример:
int i = 2;
System.out.println(i = i + i++ + i--); // Output: 7
System.out.println(i); // Output: 7
Вторая строка присваивает i . Первый i равен 2, следующий i также равен 2, но теперь третий i равен 3, поскольку i ++ изменил значение я . Как и в предыдущем случае, i - не окажет никакого влияния на i, потому что оно будет переписано с i = 2 + 2 + 3 .
int i = 1;
System.out.println(i = i++ + i); // Output: 3
System.out.println(i); // Output: 3