&& 和 | 的使用表达式中的运算符一起
Posted
技术标签:
【中文标题】&& 和 | 的使用表达式中的运算符一起【英文标题】:use of && and | operators together in a expression 【发布时间】:2012-11-29 10:24:08 【问题描述】:cond && cond op cond
op
可以是&&
或||
Qn- 对于短路 (&&
) 运算符,如果第一个条件为假,则不评估右侧部分(整体)或不评估 &&
之后的第二个条件
还有为什么下面两个表达式的结果不同?
(2 > 3 && 5 < 2 || 3 > 2)
=> True
(2 > 3 && 5 < 2 | 3 > 2)
=> False
我们不能在一个表达式中使用短路运算符和标准运算符吗...?
【问题讨论】:
【参考方案1】:您的结果不同,因为您的第二种情况使用 |而不是||。 |是按位或,与逻辑或不同。
现在您说的是短路表达式与标准表达式,但在许多语言中,短路表达式是评估逻辑表达式的默认(或唯一方式)。
如果您所说的“标准”指的是按位运算符,例如 & 或 |,那么您可以将它们与逻辑运算符混合并匹配,尽管结果可能不是您所期望的。
【讨论】:
我同意 |是位运算符,但它也可以用作非短路..我错了吗? 好的...我建议不要使用“标准”,因为如果有的话,短路的就是标准的。还有,别想|作为非短路。它的作用与 || 不同。【参考方案2】:结果不同,因为|
和||
have different precedence。
具体来说,|
的优先级高于&&
,而||
的优先级低于&&
。
System.out.println(2 > 3 && 5 < 2 || 3 > 2); // true
System.out.println(2 > 3 && 5 < 2 | 3 > 2); // false
System.out.println(2 > 3 && (5 < 2 | 3 > 2)); // false
System.out.println((2 > 3 && 5 < 2) | (3 > 2)); // true
【讨论】:
谢谢..使用有问题吗 |还是 & 作为逻辑运算符? 我不知道,但是你必须小心,因为一旦你进入不同的优先级,你必须确保你知道什么是最先出现的以及服务器将如何读取它。 @PRAKHARSHARMA 我建议不要使用|
和 &
作为逻辑运算符,因为 1)它们不会短路,因此代码会被不必要地执行,并且 2)大多数人不会'不要那样使用它们,所以你的代码将是非常规的。
我刚刚问了类似的问题,我得到了不错的答案:***.com/questions/15089890/… 简而言之,大多数人都同意使用 |和 & 强制执行业务逻辑可能会导致错误和不干净的代码。所以不鼓励,在极少数情况下还有用处。以上是关于&& 和 | 的使用表达式中的运算符一起的主要内容,如果未能解决你的问题,请参考以下文章