【问题标题】:precedence operator in java 8 - postfix operator firstjava 8 中的优先级运算符 - 后缀运算符优先
【发布时间】:2021-10-25 19:44:58
【问题描述】:

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

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

y的值为0

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

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

【问题讨论】:

  • 运算符优先级不决定求值顺序。
  • 我看到了这个关于What are the rules for evaluation order in Java? 的链接 嗯,有一个解释,但仍然不是 100% 清楚。让我换个方式问这个问题:什么时候在表达式的同一行上使用运算符优先级?或者为什么有运算符优先顺序以及何时使用?
  • postfix-notation 与此无关。

标签: operator-keyword operator-precedence postfix-operator prefix-operator


【解决方案1】:

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

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

  1. ++x - … - 两个运算符++ 和(二进制)- 可用于x++ 具有优先权,因此这相当于 (++x) - …,而不是 ++(x - …)
  2. … - x++ - 两个运算符(二进制)-++ 可用于 x++ 具有优先级,因此这相当于 … - (x++),而不是 (… - x)++

【讨论】:

  • 感谢@Armali 的回复和时间。这是可以理解的,但是我又回到了 x = 3; y = ++x - x++;为什么在这个表达式上 x++ 没有优先于 '-' 运算符?那是我无法理解的
  • 我的意思是 x++ 没有优先于 '-' 运算符,所以 x++ 在 --x 之前被评估
  • 对不起,这些短语没有意义:(a) x++ 没有优先权 - 一个像 x++ 的词不能有优先权,只有 ++ 这样的运算符可以。 (b) x++ 在 --x 之前计算 - 示例中没有 --x
  • 我们同意您询问“我们是否同意”。但是在我们同意的地方,根本没有没有 逻辑可以说明评估的顺序。更重要的是,在您的示例中,两个增量运算符之间存在 no 优先关系,因为它们不能关联到同一个操作数 - 两者之间的优先级只能存在于像 ++x++ 这样的表达式中。 // 你不能仅仅从优先表中判断评估的顺序。
  • 非常感谢@Armali,我会一点一点地消化它:)
猜你喜欢
  • 2012-12-13
  • 2018-08-22
  • 2011-12-28
  • 2011-07-07
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多