我只是想知道为什么我们通常在两个布尔值之间使用逻辑OR ||,而不是按位或|,尽管它们都工作得很好。
我的意思是,看看下面这些:
if(true | true) // pass
if(true | false) // pass
if(false | true) // pass
if(false | false) // no pass
if(true || true) // pass
if(true || false) // pass
if(false || true) // pass
if(false || false) // no pass
我们可以用|代替||吗?&和&&也是一样。
1).(expression1 | expression2), |运算符将计算expression2,而不管expression1的结果是真还是假。
例子:
class Or
{
public static void main(String[] args)
{
boolean b=true;
if (b | test());
}
static boolean test()
{
System.out.println("No short circuit!");
return false;
}
}
2).(expression1 || expression2),如果expression1为真,||操作符将不计算expression2。
例子:
class Or
{
public static void main(String[] args)
{
boolean b=true;
if (b || test())
{
System.out.println("short circuit!");
}
}
static boolean test()
{
System.out.println("No short circuit!");
return false;
}
}
逻辑||和&&只在必要时检查右边。|和&每次检查两边。
例如:
int i = 12;
if (i == 10 & i < 9) // It will check if i == 10 and if i < 9
...
重写:
int i = 12;
if (i == 10 && i < 9) // It will check if i == 10 and stop checking afterward because i != 10
...
另一个例子:
int i = 12;
if (i == 12 | i > 10) // It will check if i == 12 and it will check if i > 10
...
重写:
int i = 12;
if (i == 12 || i > 10) // It will check if i == 12, it does, so it stops checking and executes what is in the if statement
...