Java中OR运算符||和|的区别是什么?

3
有人能解释一下Java中OR运算符(|||)的区别和用法吗?谢谢。
例如:
if(a || b) {
// Do something.
}

并且

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

1
前者是逻辑或运算符,后者是按位或运算符。主要区别在于逻辑或运算符的结果为布尔类型,而按位或运算符的结果取决于被操作数的类型。还有一些其他的区别。 - BigMike
5个回答

4
这很简单。 http://www.roseindia.net/help/java/o/java-operator.shtml指出:
OR运算符是一种条件运算符,用|符号表示。根据变量的状态,它返回真或假值,即使用条件运算符执行两个布尔表达式之间的操作。
OR运算符(|)类似于条件-OR运算符(||),如果其操作数中有一个为true,则返回true。
注意:在||运算符中,如果有多个条件并且第一个条件返回true,则忽略其他条件,但是在|运算符中,所有条件都被检查。
有关更多信息,请访问http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

3
第一个是逻辑或。运算符的两侧被视为布尔值,结果也是布尔型的。如果涉及的变量不是布尔值,它们会在等于0或者null的情况下变为false。
第二个是按位或运算符。这通常只用于整数。它逐位比较两个值并给出结果数字。例如:
5   | 6   = 7    (decimal)
101 | 110 = 111  (binary)

更多细节请查看维基百科:逻辑或


我完全同意Nitram的帖子。只需提到Java编译器即使开发人员使用位运算符与布尔值,也会评估true | false - Dvin

2
如果您使用运算符||,JVM将不会单独评估右操作数。

1

|| 运算符是一个布尔运算符。

它可以简单地解释为...

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

| 运算符是一个逻辑运算符

它只能用于像int、char等整数类型上...

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

例如:

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;
}

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()方法也会产生类似的结果。
另一个需要考虑的方面是按位运算符在逻辑运算符之前执行。因此,不建议混合使用它们,因为按位或将在逻辑与之前执行,这可能会导致不希望的行为。可以使用括号()进行修复,但我认为应该避免这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接