【问题标题】:logical OR and Bitwise OR [duplicate]逻辑或和按位或 [重复]
【发布时间】:2016-11-25 17:27:34
【问题描述】:
public class j68 {
    public static void main(String args[]){
        System.out.print(1==2||true);
    }
}


public class j68 {
    public static void main(String args[]){
        System.out.print(1==2|true);
    }
}

以上都打印为true。是不是表示我们可以使用|而不是 || ?

【问题讨论】:

    标签: java


    【解决方案1】:

    有也没有,但大多不是,有几个原因。

    |(按位)和||(逻辑)之间有很大区别:对于按位|两个操作数总是被计算。 (我也不认为有任何保证首先评估哪个;至少,我没有立即在JLS§15.22.2 中看到一个,但也许在其他地方有保证。)对于合乎逻辑的||,左边-首先计算手操作数,然后在左侧结果为假时计算右手操作数。

    如果您正在做一些防御性的事情,这可能很重要,例如:

    boolean flag = obj == null || obj.flag;
    

    如果我们使用| 而不是||,那将会失败,而objnull;我们会得到一个NullPointerException

    另外,存在其他人必须阅读和使用您的代码的问题,并且在通常使用|| 的地方使用| 会令人惊讶。但这是风格问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 2023-04-06
      • 2016-05-03
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多