Java 8 中的优先级运算符 - 后缀运算符优先

precedence operator in java 8 - postfix operator first

提问人:jav 提问时间:8/26/2021 最后编辑:user207421jav 更新时间:10/7/2021 访问量:138

问:

java 8 中的优先运算符之后,很明显后缀运算符 (expr++ expr--) 比一元运算符、前一元运算符 (++expr --expr) 具有更高的优先级。 但是,在执行此代码时:

x = 3;y = ++x - x++;

y 的值为 0

但对我来说,按照上表,结果应该是 y = (5 - 3),因为应首先计算 x++。

谁能解释为什么这是 y = 0 而不是 y = 2?

operator-precedence postfix-operator prefix-operator

评论

1赞 Armali 8/29/2021
运算符优先级不决定计算顺序。
0赞 jav 8/30/2021
我看到了这个链接 Java 中评估顺序的规则是什么?好吧,有一个解释,但仍然不是 100% 清楚。让我以不同的方式提出这个问题:何时在表达式中的同一行上使用 Operator 优先级?或者为什么有运算符优先顺序以及何时使用?
0赞 user207421 10/7/2021
postfix-notation 与它无关。

答:

0赞 Armali 8/30/2021 #1

何时在表达式中的同一行上使用 Operator 优先级?或者为什么有运算符优先顺序以及何时使用?

运算符优先级决定了多个运算符中的哪一个与操作数相关联。在表达式中,优先级在两个地方起作用:++x - x++

  1. ++x - …- 两个运算符 和 (binary) 可用于 ; 有优先权,所以这等价于 ,而不是 。++-x++(++x) - …++(x - …)
  2. … - x++- 两个运算符(二进制),可用于 ; 有优先权,所以这等价于 ,而不是 。-++x++… - (x++)(… - x)++

评论

0赞 jav 8/30/2021
感谢您@Armali回复和时间。这是可以理解的,但随后我又回到了 x = 3;y = ++x - x++;为什么在这个表达式上 x++ 不优先于“-”运算符?这是我无法理解的
0赞 jav 8/30/2021
我的意思是 x++ 不优先于“-”运算符,因此 x++ 在 --x 之前计算
1赞 Armali 8/31/2021
对不起,这些短语没有意义:(a) x++ 没有优先级 - 像 x++ 这样的术语不能有优先级,只有 ++ 这样的运算符可以。(b) x++ 在 --x 之前计算 - 示例中没有 --x
1赞 Armali 8/31/2021
我们同意您问“我们同意吗”的地方。但是,在我们同意这一点上,根本没有逻辑可以说明评估的顺序。此外,在您的示例中,两个增量运算符之间没有优先级关系,因为它们不能与同一个操作数相关联 - 两者之间的优先级只能存在于类似 的表达式中。您不能仅从优先级表中判断计算顺序。++x++
1赞 jav 8/31/2021
非常感谢@Armali,我会一点一点地消化:)