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

2022-08-31 05:44:00

我只是想知道为什么我们通常在两个布尔值之间使用逻辑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

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


答案 1

如果您使用 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()
}

更多信息


答案 2

| 不在布尔表达式中执行短路计算。 将停止评估第一个操作数是否为真,但不会。|||

此外,还可用于对字节/短整型/整数/长整型值执行按位 OR 运算。 不能。|||


推荐