需要帮助理解 if 语句中的以下布尔表达式
Posted
技术标签:
【中文标题】需要帮助理解 if 语句中的以下布尔表达式【英文标题】:Need help understanding this following boolean expression in an if statement 【发布时间】:2015-04-26 17:21:39 【问题描述】:从 Kathie Sierra 的 OCA/OCP Java SE 7 程序员 I 和 II 学习指南一书中找到:
int x = 2;
int y = 5;
if ((x > 3) && (y < 2) | doStuff())
System.out.println("true");
现在打印...什么都没有!因为前面的代码(少了一个 一组括号)的计算就像你在说“如果 (x > 3) 不为真,并且 (y 3) 不是真的,那么看 表达式的其余部分“由于短路 &&, 表达式被评估,就好像 (y
据我了解,运算符&&
和||
具有相同的优先级,并且从左到右进行评估。所以在这种情况下,表达式(x > 3) && (y < 2)
仍应首先计算。请解释一下。
更新:我的错误。确实是一个“|”而不是“||”。
【问题讨论】:
是二进制还是“|”还是一个真或运算符“||”? 但是 && 的优先级低于按位包含 OR。 是的,你是对的。你应该回答(而不是评论)然后我会选择你的作为答案。 【参考方案1】:好吧,我不一定希望它打印任何东西。对于给定的 x 和 y 值,条件 x > 3 && y < 2
为 false。
我现在有时间思考运算符的优先级,基本上,无论doStuff
说什么(真或假),如果x > 3
的计算结果为false
,它不会打印任何东西。
实际上,这个表达式:
(x > 3) && (y < 2) | doStuff()
相当于:
(x > 3) && (y < 2 | doStuff())
...由于x > 3
对于给定的x
值是假的,因此整个表达式的计算结果为假。在这里,&&
将短路表达式,而不调用 doStuff
。
【讨论】:
以上是关于需要帮助理解 if 语句中的以下布尔表达式的主要内容,如果未能解决你的问题,请参考以下文章