Я пытаюсь понять порядок оценки для следующего Java-кода, выход которого равен 5:
int a = 1;
a += 2 + ++a;
System.out.println(a);
Мое понимание приоритета оператора (первое из перечисленных выше):
++ 2
+ 4
+= 14
из этого списка
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
Когда конечный оператор оценивается (+ =), не является ли значение a 2, когда начинается оценка + =?
JLS говорит следующее о сложном операторе присваивания +=
Составляющее выражение присваивания формы
E1 op= E2
эквивалентноE1 = (T) ((E1) op (E2))
, гдеT
- типE1
, за исключением того, чтоE1
оценивается только один раз.
Итак, +=
используется в
int a = 1;
a += 2 + ++a;
эквивалентно
int a = 1;
a = (int) ((a) + (2 + ++a));
Заполните пробелы, и это станет
a = 1 + (2 + 2);
E1 op= E2
эквивалентноE1 = ((E1) op (E2))
.