【问题标题】:When should you use single logical operators in java? [duplicate]什么时候应该在 Java 中使用单个逻辑运算符? [复制]
【发布时间】:2019-01-23 18:35:32
【问题描述】:

直截了当:与短路的&&|| 变体相比,何时使用单个& 或单个| 更好?

我似乎找不到一个更好的例子来评估布尔表达式的两边。

【问题讨论】:

  • & 和 |是按位,而不是逻辑运算符。您在处理数字时使用它们,而不是布尔值。
  • 有趣的是,有 3 个人支持了 @yole 的错误评论...
  • 运算符确实使用布尔值,但在使用布尔值时通常不会使用它们。我不明白为什么我的评论不正确。
  • @yole 因为|& 不是布尔上下文中的(整数)位运算符,所以它们是非短路布尔逻辑运算符,请参阅Java Language Specification section 15.22.2。诚然,您通常不需要使用它们,但这并不能使您断言 “[y]您在处理数字而不是布尔值时使用它们”

标签: java logical-operators


【解决方案1】:

正如您所暗示的,您意识到短路运算符&&|| 与非短路运算符&| 之间的区别。但这种差异何时会变得显着?当第二个表达式有副作用或者是影响性能的长时间运行的操作时。最简单的副作用示例是恰好返回 boolean 的方法调用,例如:

if (firstOperation() & secondOperation()) //...

当您需要确保副作用发生时,请不要短路。但我在实践中并不经常看到它,因为先调用有副作用的方法,然后评估条件更清楚,例如:

boolean first = firstOperation();
boolean second = secondOperation();

if (first && second) //...

通常您会看到短路运算符,如果不需要,它会避免计算第二个操作数。当第二个条件没有副作用时,这会派上用场,如果第二个条件涉及大量开销成本,它就会变得很重要。

【讨论】:

    猜你喜欢
    • 2014-07-15
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2017-06-28
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多