14

应该执行以下两个 if 块的内容:

if( booleanFunction() || otherBooleanFunction() ) {...}
if( booleanFunction() | otherBooleanFunction() ) {...}

|那么 using或 using 和有什么区别||

注意:我调查了这个并找到了我自己的答案,我将其包含在下面。请随时纠正我或发表您自己的看法。肯定有改进的余地!

4

5 回答 5

40

两者有不同的用途。尽管在许多情况下(在处理布尔值时)它们可能看起来具有相同的效果,但重要的是要注意逻辑或是短路的,这意味着如果它的第一个参数计算为真,则留下第二个参数未评估。位运算符无论如何都会计算它的两个参数。

类似地,逻辑与是短路的,这意味着如果它的第一个参数计算为假,那么第二个参数不计算。同样,按位与不是。

你可以在这里看到这个:

int x = 0;
int y = 1;
System.out.println(x+y == 1 || y/x == 1);
System.out.println(x+y == 1 |  y/x == 1);

第一个打印语句工作得很好并返回真,因为第一个参数的计算结果为真,因此计算停止。第二个打印语句出错,因为它不是短路,并且遇到被零除。

于 2012-06-22T12:55:41.687 回答
15

逻辑运算符作用于布尔值,位运算符作用于位。在这种情况下,效果将是相同的,但有两个不同之处:

  1. 位运算符不是为此而设计的,这使得它更难阅读,但最重要的是
  2. 逻辑 OR 运算符将评估第一个条件。如果为真,不管下一个条件的结果是什么,结果都会为真,所以不执行第二个子句

这里有一些方便的代码来证明这一点:

public class OperatorTest {

    public static void main(String[] args){
        System.out.println("Logical Operator:");
        if(sayAndReturn(true, "first") || sayAndReturn(true, "second")){
            //doNothing
        }

        System.out.println("Bitwise Operator:");
        if(sayAndReturn(true, "first") | sayAndReturn(true, "second")){
            //doNothing
        }
    }

    public static boolean sayAndReturn(boolean ret, String msg){
        System.out.println(msg);
        return ret;
    }
}
于 2012-06-22T12:50:52.540 回答
7

对于程序员来说,只有一个区别。

  1. 您的逻辑运算符是逻辑运算符,即它们仅测试一个条件并根据该条件获得结果。

布尔函数() || 如果其中任何一个为真,则otherBooleanFunction()将为真。同样,如果任何一个为假,则booleanFunction() && otherBooleanFunction()将为假。那么,为什么要测试另一个。这就是逻辑运算符所做的。

但按位检查两者。这个概念的一个常见应用如下。

if(someObject != null && someObject.somemethod())

所以,在这种情况下,如果你更换&&的话,&那就等一场灾难吧。你很快就会得到讨厌的 NullPointerException ......

于 2012-06-22T13:00:09.673 回答
4
if( booleanFunction() || otherBooleanFunction() ) {...}

在这种情况下,如果booleanFunction()返回true,则otherBooleanFunction()不会执行。

if( booleanFunction() | otherBooleanFunction() ) {...}

但是在按位运算符中,这两个功能都booleanFunction()-otherBooleanFunction()无论booleanFunction()返回true还是false

于 2012-06-22T12:57:44.110 回答
0

位和逻辑运算符之间的区别- 1.位运算符适用于位,而逻辑运算符适用于语句。2. 按位与由 & 表示,而逻辑与由 && 表示。3. 按位或由 | 表示 而逻辑或由 || 表示。

于 2015-05-27T16:52:37.917 回答