java运算符优先级y = --x + x ++;

时间:2016-08-21 18:24:38

标签: java operator-precedence post-increment

x=10;
y = --x + x++;
System.out.println(y);
// prints 18    

根据链接https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html,后缀增量(x ++)的优先级高于前缀增量/减量(--x)。

因此x++(值10)应在--x之前执行(值11-1 = 10);所以y=20。但是' y'变成18岁?

1 个答案:

答案 0 :(得分:3)

正如this link

所述
  

关联性和优先级确定Java将运算符应用于子表达式的顺序,但它们不确定子表达式的计算顺序。在Java中,子表达式从左到右进行评估(当有选择时)。因此,例如在表达式A() + B() * C(D(), E())中,子表达式按{... 1}},A()B()D()E()的顺序进行评估。虽然C()出现在D()和E()的左侧,但我们需要C()D()的结果来评估E()。编写依赖于此行为的代码被认为是不好的风格(并且不同的编程语言可能使用不同的规则)。

这解释了为什么

C()

之前执行和评估

--x

因为它是两个子表达式的总和,所以从左到右计算整个表达式。所以第一个在x++ 之前执行(是的,后修复x++一般有更多优先权,但是这里包含它的子表达式在第一个之后被评估)。

所以,18是正确的,因为你总结了两次9到++,如下所述

x