Использование инкрементов в арифметических операциях

Пожалуйста, помогите!

Есть такая операция:

int i = 1;
i = i++ + (i++ * i++) + i++;
System.out.println(i);

Результат == 11.

Но я не ПОНИМАЮ как... Если по шагам, поправьте пожалуйста:

  1. Выполняем операцию в скобках, умножение. 1 * (i становится равным 2) 2 = 2;
  2. Далее, слева направо: 2 + 2(i становится == 3) = 4
  3. 4 + 3 = 7.

Ответ, конечно, неверный... Но где я допустил ошибку?

Эта преграда тормозит мое обучение, очень хочу понять. Буду рад развернутому ответу...


Ответы (1 шт):

Автор решения: Leviathan_ZC
i = 1 + (2 * 3) + 4 

Последнюю постинкрементацию можно не рассматривать, т.к. эта операция игнорируется (всё равно записываем результат в ту же операцию).

Существует приоритет операций. Но его можно изменять с помощью скобок. В скобках находится операция умножения, а она по приоритету ниже постинкремента. Ведь постинкремент применяется к переменным. А для того, чтобы сформировать конечную операцию для сложения/умножения ЧИСЕЛ, а не ссылок на эти числа, изначально нужно во все места с переменными подставить конкретные числа.

Это моё предположение, могу быть не прав.

→ Ссылка