请查看以下代码:
int a = 5, b = 7;
System.out.println(++a + b-- - a-- * --b);
它输出-17。但是我不明白为什么。我认为输出应为-19。因为首先我们进行乘法5 * 6 = 30,然后乘5 + 6 = 11,最后乘11-30 = -19。 有人可以告诉我为什么输出为-17吗?
答案 0 :(得分:4)
以下是使用Java中操作顺序的说明:
int a = 5, b = 7;
++a + b-- - a-- * --b
6 + 7 - (6 * 5)
13 - 30
-17
第一个项的值为6,因为++a
的意思是先递增a
然后求值。另一方面,b--
的求值为7
,因为后缀--
出现在 b
之后。对于乘法中涉及的两个术语,由于Java中操作规则的顺序,我们将其放在括号中。同样的逻辑也适用于此,我们得到30个产品。
答案 1 :(得分:0)
您将evaluation order与precedence混淆了。
无论操作符的优先级如何,操作数++a
,b--
,a--
和--b
都是从左到右求值的。