使用&&和|运营商在一起表达

时间:2012-12-11 19:55:36

标签: java logical-operators

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

我们不能在一个表达式中使用短路运算符和标准运算符......?

2 个答案:

答案 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 ;;这样的按位运算符或者|,然后你可以将它们与逻辑运算符混合和匹配,尽管结果可能不是你所期望的。