Why do we usually use || over |? What is the difference?

bitwise-operators, java

Solution

If you use the `||` and `&&` forms, rather than the `|` and `&` forms of these operators, Java will not bother to evaluate the right-hand operand alone.

It's a matter of if you want to short-circuit the evaluation or not -- most of the time you want to.

A good way to illustrate the benefits of short-circuiting would be to consider the following example.

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

Another benefit, as Jeremy and Peter mentioned, for short-circuiting is the null reference check:

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

more info

Problem

I'm just wondering why we usually use logical OR `||` between two booleans not bitwise OR `|`, though they are both working well. I mean, look at the following: ``` 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 ``` Can we use `|` instead of `||`? Same thing with `&` and `&&`.

Original source