Согласно спецификации приоритета операций Oracle, такие операции, как:
x-- // Returns x, then subtracts 1 from x.
должно иметь приоритет над:
--x // Subtracts 1 from x, then returns x.
Итак, учитывая небольшой фрагмент ниже, почему:
int x = 5;
int y = --x * 5 + x--;
System.out.println(x+" vs "+y);
напечатать 3 vs 24
вместо 3 vs 20
?
Доработка
Предполагая заданный порядок приоритета операторов, можно разбить строку № 2 фрагмента на следующие псевдоблоки (ранее оцененные значения заключены в квадратные скобки):
Оценить
x--
Оценить
--x
Оценить
[--x] * 5
Оценить
[--x * 5] + [x--]
Оценить
y = [--x * 5 + x--]
Что тогда разрешится следующим образом:
Через 1 returns 5
sets x to 4
Через 2 sets x to 3
returns 3
Через 3 multiplies 3 by 5 and returns 15
Через 4 adds 15 to 5 and returns 20
Через 5 sets y to 20
Почему возвращаемое значение равно 24, а не 20.
P.S. (Вы получите 24, если вычислите --x перед x--, но это не должно быть так из-за приоритета оператора).
Я слепой или просто плохо разбираюсь в математике или что?