例如,如果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
逻辑或的||优先级低于逻辑与&&。所以:
A && B || C && D 等效于:
(A && B) || (C && D) 而括号内的内容将首先进行评估。
阅读有关Java运算符的更多信息: Java™教程-运算符
请注意,&&和||是短路运算符,这意味着如果可以通过评估左操作数来推断结果,则不会评估右操作数。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。