Цитата:
Кстати, Java стандарт строго регламентирует, что должно получиться в таких случаях, но совсем по другому.
Например, вот это:
Код:
int i = 1;
i = i++ + i++ + i++ + ++i;
даст 11.
Догадайтесь, почему.
Ну, видимо,в Java стандарте приоритет префиксного инкремента выше, чем у большинства операций(в частности, выше чем постфиксного инкремента).
Поэтому данный код "равносилен" такому:
Код:
int i = 1;
++i;//2
i = i + i + i +i;//8
i++;//9
i++;//10
i++;//11
Неправильно. Если убрать одно i++, то Java даст 7, а не 8, как получилось бы с вашими рассуждениями.
Особенность Java в том, что, во первых, результат инкремента в переменную записывается немедленно, и, во вторых, операнды вычисляются слева направо.
Выражение i = i++ + i++ + ++i выполняется так:
1. первый операнд равен 1, в i записывается 2.
2. второй операнд равен 2, в i записывается 3.
3. третий операнд равен 4, и в i записывается тоже 4.
4. наконец, i = 1 + 2 + 4 = 7.
В случае с четырьмя операндами i = 1 + 2 + 3 + 5 = 11.