带有+ =和++(预增量)的Java运算符优先级

时间:2014-09-01 22:29:18

标签: java operator-precedence

我正在尝试理解以下输出为5的Java代码的评估顺序:

int a = 1;
a += 2 + ++a;
System.out.println(a);

我对运算符优先级的理解(最高列出的第一个)是:

++ 2
+ 4
+= 14

来自此列表

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

当评估最终算子时(+ =),当+ =的评价开始时,不是2的值?

1 个答案:

答案 0 :(得分:6)

JLS says the following about the compound assignment operator +=

  

E1 op= E2形式的复合赋值表达式是等效的   到E1 = (T) ((E1) op (E2)),其中TE1的类型,E1除外   仅评估一次

中使用了+=
int a = 1;
a += 2 + ++a;

相当于

int a = 1;
a = (int) ((a) + (2 + ++a));

填写空白,这就变成了

a = 1 + (2 + 2);