我只是想知道为什么我们通常||在两个布尔值之间使用逻辑 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
我们可以使用|代替||吗?与&和相同&&。
&
&&
如果您使用||and&&形式,而不是这些运算符的|and&形式,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() }
更多信息