一尘不染

Java为什么我们通常使用|| 超过|?有什么区别?

java

我只是想知道为什么我们通常||在两个布尔之间使用逻辑OR 而不是按位OR |,尽管它们都运行良好。

我的意思是,请看以下内容:

if(true  | true)  // pass
if(true  | false) // pass
if(false | true)  // pass
if(false | false) // no pass
if(true  || true)  // pass
if(true  || false) // pass
if(false || true)  // pass
if(false || false) // no pass

| |
我们可以|代替使用||吗?与&和相同&&。


阅读 401

收藏
2020-03-03

共1个答案

一尘不染

如果使用||&&形式,而不是这些运算符的|&形式,则Java不会费心地单独评估右手操作数。

多数情况下,是否要缩短评估是一个问题。

说明短路好处的一个好方法是考虑以下示例。

Boolean b = true;
if(b || foo.timeConsumingCall())
{
   //we entered without calling timeConsumingCall()
}

正如Jeremy和Peter提到的,短路的另一个好处是空引用检查:

if(string != null && string.isEmpty())
{
    //we check for string being null before calling isEmpty()
}
2020-03-03