开发者社区> 问答> 正文

Java中多个括号的运算符优先级

例如,如果currNode.leftand currNode.right为null,则我希望在评估除than之前中断if语句currNode.left != null,但是以下if语句引发空指针错误,因为它首先评估括号中的语句:

if (currNode.left != null && currNode.right != null && (currNode.left.val == x && currNode.right.val == y) || (currNode.left.val == y && currNode.right.val == x))

作为结尾处的一对额外的括号给出了所需的行为:

if (currNode.left != null && currNode.right != null && ((currNode.left.val == x && currNode.right.val == y) || (currNode.left.val == y && currNode.right.val == x)))

我知道()之前已经过评估&&,但是我不确定这里发生了什么。

问题来源:Stack Overflow

展开
收起
montos 2020-03-27 17:17:24 604 0
1 条回答
写回答
取消 提交回答
  • 逻辑或的||优先级低于逻辑与&&。所以:

    A && B || C && D 等效于:

    (A && B) || (C && D) 而括号内的内容将首先进行评估。

    阅读有关Java运算符的更多信息: Java™教程-运算符

    请注意,&&和||是短路运算符,这意味着如果可以通过评估左操作数来推断结果,则不会评估右操作数。

    回答来源:Stack Overflow

    2020-03-27 17:18:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载