cond && cond op cond
op
可以是&&
或||
Qn-对于短路(&&
)运算符,如果第一个cond为false,则不评估右侧部分(整个)或仅评估&&
之后的第二个cond
为什么以下两个表达式的结果不同?
(2 > 3 && 5 < 2 || 3 > 2)
=&gt; True
(2 > 3 && 5 < 2 | 3 > 2)
=&gt; False
我们不能在一个表达式中使用短路运算符和标准运算符......?
答案 0 :(得分:3)
结果不同,因为|
和||
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
答案 1 :(得分:1)
您的结果有所不同,因为您的第二个案例使用了|而不是||。 |是逐位的,或者与逻辑或。不同。
现在你说的是短路表达式与标准表达式,但在许多语言中,短路表达式是默认(或唯一的方式)逻辑表达式的评估。
如果用“标准”来表示像&amp ;;这样的按位运算符或者|,然后你可以将它们与逻辑运算符混合和匹配,尽管结果可能不是你所期望的。