【问题标题】: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

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

【问题讨论】:

    标签: java logical-operators


    【解决方案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 我建议不要使用 |&amp; 作为逻辑运算符,因为 1)它们不会短路,因此代码会被不必要地执行,并且 2)大多数人不会'不要那样使用它们,所以你的代码将是非常规的。
    • 我刚刚问了类似的问题,我得到了不错的答案:stackoverflow.com/questions/15089890/… 简而言之,大多数人都同意使用 |和 & 强制执行业务逻辑可能会导致错误和不干净的代码。所以不鼓励,在极少数情况下还有用处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多