我正在尝试理解以下输出为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的值?
答案 0 :(得分:6)
JLS says the following about the compound assignment operator +=
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);