【问题标题】:java short circuit operatorsjava短路运算符
【发布时间】:2014-06-22 18:03:39
【问题描述】:

我怀疑短路运算符的优先级。

短路算子的经典例子如下。

if(denom != 0 && num/denom > 10)

这里使用速记运算符可以防止除以零错误,因为从不执行 num/denom。

现在我的问题是 Java 说 '/' 运算符的优先级高于 '&&' ,那么如何在 '/' 之前评估 '&&' 的左侧?

【问题讨论】:

  • 不要将优先级与关联性混淆。
  • 因为它们被解释为两个离散的评估,而不是一个长的评估。
  • 不要将优先级与评估顺序混淆。

标签: java operators


【解决方案1】:

/ 的优先级高于>,后者的优先级高于&&。所以,表达式

a && b / c > 0

与

相同
a && (b / c) > 0

与

相同
a && ((b / c) > 0)

然后从左到右计算表达式。

如果a 为假,则整个表达式为假,甚至不计算第二项。

如果a 为真,则首先评估b / c,并将结果与​​0 进行比较。

【讨论】:

  • +1 优先级决定了隐含括号的位置,而不是评估的顺序(尽管它是分级的)。
  • 谢谢你们,我对子表达式的优先级和关联性以及求值顺序感到困惑。在阅读了你的 cmets 之后,我明白了我要去哪里疯狂。在深入研究该主题时,我发现了另一个堆栈溢出答案,它深入解释了这一切。发布链接,以便其他人可能会发现它有用stackoverflow.com/questions/6800590/…。再次感谢大家帮助我
猜你喜欢
  • 2012-02-04
  • 2015-09-26
  • 2015-07-14
  • 2018-06-14
  • 2020-05-09
  • 2019-02-04
相关资源
最近更新 更多