java对布尔类型进行位运算
java中允许对布尔类型进行位运算
boolean flag1 = false;
boolean flag2 = true;
& 按位与运算
//&
Systeam.out.println(flag1 & flag2)//输出false
对两个布尔类型变量使用**&按位运算符,当二者皆为true就会输出true**,其他任何情况则输出false
| 按位或运算
//|
System.out.println(flag1 | flag2);//输出ture
对两个布尔类型变量使用**|运算符,当二者其一为true就会输出true**,即只有当二者皆为false时才会输出false
^ 按位异或运算
//^
System.out.println(flag1 ^ flag2);//输出ture
对两个布尔类型变量使用**^运算符,当二者值一致时会输出false**,值不一致时输出true
按位与、或与逻辑与、或的区别
由以上,似乎能得出:&和&&功能相同、|与||功能相同?
但&与&&、|与||是有不同的:
逻辑与、或(&&、||)是有短路操作 的,而按位与、或(&、|)是没有短路操作 的
何为短路操作?
短路操作
短路(short-circuiting)操作:拿到符合预期的结果就会停下来,不一定会处理完所有数据。
//当程序执行该段代码时:
public class test {
public static boolean judge1(){
System.out.println("judge1执行");
return false;
}
public static boolean judge2(){
System.out.println("judge2执行");
return true;
}
public static void main(String[] args){
if(judge1()&&judge2()){
//
}
}
运行结果为:
judge1执行
当把if中的**&&改为&**时,运行结果为:
judge1执行
judge2执行
可见有短路操作时,执行完judge1后,该程序已经可以得出if中逻辑判断为false,该次逻辑判断便会停止,不会执行judge2
当无短路操作时,该次逻辑判断便仍然会持续下去,进而执行judge2。