Приоритет Java-оператора с + = и ++ (преинкремент)

1

Я пытаюсь понять порядок оценки для следующего 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, когда начинается оценка + =?

  • 0
    Составное выражение присваивания в форме E1 op= E2 эквивалентно E1 = ((E1) op (E2)) .
  • 0
    Если вы сомневаетесь относительно языка , проверьте спецификацию языка
Показать ещё 1 комментарий
Теги:
operator-precedence

1 ответ

6

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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню