В ходе теста, который я проходил, вопрос заключался в том, чтобы оценить результат выражения, включающего множество операторов увеличения и уменьшения, а также сокращенный оператор. Меня всегда учили думать как компилятор.
Точный вопрос был такой:
Код: Выделить всё
int x = 7, y = 5;
x -= x++ + y + --y + ++x + 10;
System.out.println(x);
У меня вопрос: ,
поскольку операторы увеличения и уменьшения автоматически обновляют значение переменной, почему сокращенный оператор не использует окончательное значение переменной?
Теперь перейдем к (упрощенному) проблема:
Код: Выделить всё
int x = 10;
x -= ++x + ++x;
Код: Выделить всё
x = x - (++x + ++x)
Но я думал вот так
Код: Выделить всё
x = x - (++x + ++x)
x = x - (11 + ++x)
x = x - (11 + 12)
x = 12 - (11 + 12)
x = 12 - 23
x = -11
Но почему Java использует исходное значение для сокращения?
И почему это обрабатывается по-другому, если так?
p>
редактировать: спасибо за ваши ответы, очевидно, операторы присваивания извлекают и запоминают значение левого операнда, чего я не знал
Подробнее здесь: https://stackoverflow.com/questions/793 ... value-of-x