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

我们可以用|代替||吗?&和&&也是一样。


当前回答

操作符||和&&被称为条件操作符,而|和&被称为位操作符。它们有不同的用途。

条件操作符仅适用于在左侧和右侧都静态求值为布尔值的表达式。

位操作符适用于任何数字操作数。

如果希望执行逻辑比较,则应该使用条件操作符,因为您将向代码添加某种类型安全。

其他回答

一个主要的区别是||和&&表现出“短路”,所以RHS只在需要时进行评估。

如。

if (a || b) {
    path1...
} else {
    path2..
}

如果a为真,则不会测试b,并执行path1。如果使用|,则即使'a'为真,两边也将被求值。

看这里和这里,了解更多信息。

希望这能有所帮助。

||是逻辑或运算符,|是位或运算符。

boolean a = true;
boolean b = false;

if (a || b) {
}

int a = 0x0001;
a = a | 0x0002;

Java运营商

|是位或,||是逻辑或。

来看看:

http://java.sun.com/docs/books/tutorial/java/nutsandbolts/operators.html

|是位包含或

||为逻辑或

| =位或,|| =逻辑或