提问人:jav 提问时间:8/26/2021 最后编辑:user207421jav 更新时间:10/7/2021 访问量:138
Java 8 中的优先级运算符 - 后缀运算符优先
precedence operator in java 8 - postfix operator first
问:
在 java 8 中的优先运算符之后,很明显后缀运算符 (expr++ expr--) 比一元运算符、前一元运算符 (++expr --expr) 具有更高的优先级。 但是,在执行此代码时:
x = 3;y = ++x - x++;
y 的值为 0
但对我来说,按照上表,结果应该是 y = (5 - 3),因为应首先计算 x++。
谁能解释为什么这是 y = 0 而不是 y = 2?
答:
0赞
Armali
8/30/2021
#1
何时在表达式中的同一行上使用 Operator 优先级?或者为什么有运算符优先顺序以及何时使用?
运算符优先级决定了多个运算符中的哪一个与操作数相关联。在表达式中,优先级在两个地方起作用:++x - x++
++x - …
- 两个运算符 和 (binary) 可用于 ; 有优先权,所以这等价于 ,而不是 。++
-
x
++
(++x) - …
++(x - …)
… - 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,我会一点一点地消化:)
评论