【问题标题】:What is difference between logical OR and short circuit OR operator? [duplicate]逻辑 OR 和短路 OR 运算符有什么区别? [复制]
【发布时间】:2016-04-10 06:58:54
【问题描述】:

我得到了相同的输出: 一个 | b = 假 一个 || b = 假 一个 | b = 真 一个 || b = 真 一个 | b = 真 一个 || b = 真 一个 | b = 真 一个 || b = 真

What is the difference between these two operators ? 

boolean a = false;  
boolean b = false;  

System.out.println("a | b = " + (a|b) );
System.out.println("a || b = " + (a||b) );

a = false;  
b = true;   
System.out.println("a | b = " + (a|b) );
System.out.println("a || b = " + (a||b) );

a = true;   
b = false;  
System.out.println("a | b = " + (a|b) );
System.out.println("a || b = " + (a||b) );

a = true;   
b = true;   
System.out.println("a | b = " + (a|b) );
System.out.println("a || b = " + (a||b) );

【问题讨论】:

    标签: java logical-operators


    【解决方案1】:

    不同之处在于,如果第一个操作数为真,则短路运算符不会计算第二个操作数,而没有短路的逻辑 OR 始终会计算两个操作数。

    你不会在你的简单测试中看到任何区别,因为假设没有抛出异常,两者都应该给出相同的输出,但是如果你尝试这样的事情:

    String s = null;
    System.out.println("a || b = " + s==null || s.length() == 0 );
    System.out.println("a | b = " + s==null | s.length() == 0 );
    

    第一个运算符将为您提供 true,而第二个运算符将为您提供 NullPointerException,因为只有 | 运算符会尝试评估 s.length() == 0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2012-09-09
      • 2021-04-19
      • 2011-03-10
      • 1970-01-01
      • 2022-10-16
      相关资源
      最近更新 更多