Использование инкрементов в арифметических операциях
Пожалуйста, помогите!
Есть такая операция:
int i = 1;
i = i++ + (i++ * i++) + i++;
System.out.println(i);
Результат == 11.
Но я не ПОНИМАЮ как... Если по шагам, поправьте пожалуйста:
- Выполняем операцию в скобках, умножение. 1 * (i становится равным 2) 2 = 2;
- Далее, слева направо: 2 + 2(i становится == 3) = 4
- 4 + 3 = 7.
Ответ, конечно, неверный... Но где я допустил ошибку?
Эта преграда тормозит мое обучение, очень хочу понять. Буду рад развернутому ответу...
Ответы (1 шт):
i = 1 + (2 * 3) + 4
Последнюю постинкрементацию можно не рассматривать, т.к. эта операция игнорируется (всё равно записываем результат в ту же операцию).
Существует приоритет операций. Но его можно изменять с помощью скобок. В скобках находится операция умножения, а она по приоритету ниже постинкремента. Ведь постинкремент применяется к переменным. А для того, чтобы сформировать конечную операцию для сложения/умножения ЧИСЕЛ, а не ссылок на эти числа, изначально нужно во все места с переменными подставить конкретные числа.
Это моё предположение, могу быть не прав.