应该执行以下两个 if 块的内容:
if( booleanFunction() || otherBooleanFunction() ) {...}
if( booleanFunction() | otherBooleanFunction() ) {...}
|
那么 using或 using 和有什么区别||
?
注意:我调查了这个并找到了我自己的答案,我将其包含在下面。请随时纠正我或发表您自己的看法。肯定有改进的余地!
应该执行以下两个 if 块的内容:
if( booleanFunction() || otherBooleanFunction() ) {...}
if( booleanFunction() | otherBooleanFunction() ) {...}
|
那么 using或 using 和有什么区别||
?
注意:我调查了这个并找到了我自己的答案,我将其包含在下面。请随时纠正我或发表您自己的看法。肯定有改进的余地!
两者有不同的用途。尽管在许多情况下(在处理布尔值时)它们可能看起来具有相同的效果,但重要的是要注意逻辑或是短路的,这意味着如果它的第一个参数计算为真,则留下第二个参数未评估。位运算符无论如何都会计算它的两个参数。
类似地,逻辑与是短路的,这意味着如果它的第一个参数计算为假,那么第二个参数不计算。同样,按位与不是。
你可以在这里看到这个:
int x = 0;
int y = 1;
System.out.println(x+y == 1 || y/x == 1);
System.out.println(x+y == 1 | y/x == 1);
第一个打印语句工作得很好并返回真,因为第一个参数的计算结果为真,因此计算停止。第二个打印语句出错,因为它不是短路,并且遇到被零除。
逻辑运算符作用于布尔值,位运算符作用于位。在这种情况下,效果将是相同的,但有两个不同之处:
这里有一些方便的代码来证明这一点:
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;
}
}
对于程序员来说,只有一个区别。
布尔函数() || 如果其中任何一个为真,则otherBooleanFunction()将为真。同样,如果任何一个为假,则booleanFunction() && otherBooleanFunction()将为假。那么,为什么要测试另一个。这就是逻辑运算符所做的。
但按位检查两者。这个概念的一个常见应用如下。
if(someObject != null && someObject.somemethod())
所以,在这种情况下,如果你更换&&
的话,&
那就等一场灾难吧。你很快就会得到讨厌的 NullPointerException ......
if( booleanFunction() || otherBooleanFunction() ) {...}
在这种情况下,如果booleanFunction()
返回true
,则otherBooleanFunction()
不会执行。
if( booleanFunction() | otherBooleanFunction() ) {...}
但是在按位运算符中,这两个功能都booleanFunction()
-otherBooleanFunction()
无论booleanFunction()
返回true
还是false
位和逻辑运算符之间的区别- 1.位运算符适用于位,而逻辑运算符适用于语句。2. 按位与由 & 表示,而逻辑与由 && 表示。3. 按位或由 | 表示 而逻辑或由 || 表示。