OR运算符||之间的区别和|在Java?

时间:2012-04-10 07:08:17

标签: java

  

可能重复:
  Why do we usually use || not |, what is the difference?

任何人都可以在java中解释OR运算符(|||)之间的区别和用法。感谢

例如:

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

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

5 个答案:

答案 0 :(得分:3)

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

  

OR运算符是一种表示的条件运算符   通过|符号。它根据状态返回true或false值   变量,即使用条件运算符的运算   在两个布尔表达式之间执行。

     

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

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

有关http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

的更多信息

答案 1 :(得分:3)

第一个是逻辑或。运算符的两边都作为boolean值处理,结果为boolean。如果相关变量本身不是boolean,则如果它们是0null则会变为假。

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

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

有关详细信息,请查看Wikipedia: Logical disjunction

答案 2 :(得分:2)

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

答案 3 :(得分:1)

|| operator是一个布尔运算符

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

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

| operator是一个逻辑运算符

它只适用于整数类型,如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;
}

答案 4 :(得分: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()。更改为按位 - 或(即布尔a = getTrue()| getTrue();)将导致两次调用getTrue()。

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

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

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