3

可能重复:
为什么我们通常使用||not |,有什么区别?

任何人都可以解释Java中OR运算符(|| 和)之间的区别和用法吗?|谢谢

例如:

if(a || b) {
// Do something.
}

if(a | b) {
// Do something.
}
4

5 回答 5

4

这很简单。http://www.roseindia.net/help/java/o/java-operator.shtml说:

OR 运算符是一种条件运算符,用 | 表示。象征。它根据变量的状态返回真或假值,即在两个布尔表达式之间执行使用条件运算符的操作。

OR 运算符 (|) 类似于 Conditional-OR 运算符 (||),如果其中一个或另一个操作数为真,则返回真。

注意:在||运算符中,如果有多个条件并且如果第一个条件return true则忽略其他条件,但在|运算符中所有条件都检查。

有关http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html的更多信息

于 2012-04-10T07:15:24.203 回答
3

第一个是逻辑或。运算符的两边都作为boolean值处理,结果是boolean. 如果所讨论的变量本身不是boolean它们本身,那么如果它们是0or ,它们就会变为假null

第二个是按位或运算符。这个通常只适用于整数。我逐位比较这两个值并给出结果数字。例如:

5   | 6   = 7    (decimal)
101 | 110 = 111  (binary)

有关更多详细信息,请查看维基百科:逻辑析取

于 2012-04-10T07:17:20.363 回答
2

如果使用运算符 || JVM 不会单独计算右手操作数。

于 2012-04-10T07:13:43.250 回答
1

第一个是逻辑或,后者是按位或。但是,如果两个运算符(在您的示例中为 a 和 b)是布尔值,则按位或被视为逻辑或没有短路。这有时很方便。

例如,考虑:

boolean getTrue() {
    System.out.println("getTrue() called");
    return true;
}

public static void main(String[] args) {
    boolean a = getTrue() || getTrue();
    System.out.println("Result: " + a);
}

上面只会打印一次“getTrue() called”,因为逻辑或 (||) 可以立即确定表达式的结果,而无需第二次调用 getTrue()。更改为按位或(即 boolean a = getTrue() | getTrue();)将导致两次调用 getTrue()。

使用按位 & 操作和 getFalse() 方法将产生类似的结果。

要考虑的另一个方面是按位运算符优先于逻辑运算符。因此,不建议按位混合它们,否则将在逻辑与之前执行,这可能会导致不良行为。可以使用方括号 () 进行修复,但我认为应该避免这种情况。

作为旁注,我不同意你的问题的否决票,这是一个有效的好问题!(给它+1)

于 2012-04-10T07:20:54.230 回答
1

|| 运算符是布尔运算符

它可以用简单的英语解释为...

if ( a is true or b is true)
{
 //do soemthing
}

的| 运算符是逻辑运算符

它仅适用于整数类型,如 int、char 等...

它是对两个操作数的按位或运算

例子:

bool a = true;
bool b = false;

bool c = a | b;

//c will  be true


if(a | b )
{


}

is same as

c = a | b;

if ( c == true)
{
  do something;
}
于 2012-04-10T07:15:20.397 回答