逻辑运算符操作的都是boolean类型(T or F)的变量:& && | || ! ^
1.区分& (与) 与 &&(短路与) :
- 相同点1:& 与 && 的运算结果相同
- 相同点2:当符号左边是true时,二者都会执行符号右边的运算
- 不同点:当符号左边是false时,&继续执行符号右边的运算。&&不再执行符号右边的运算。
- 开发中,推荐使用&&
//北京表示进入if()
//南京表示进入else()
&
true & true YES true
false & true NO false
false & false NO false
true & false NO false
左为真,&/&&左右都运算;
左为假,&左右都运算;&&左运算;
&&
true & true YES true
false & true NO false
false & false NO false
true & false NO false
---------- java ----------
************ & ***************
true & true
我现在在北京
num1 = 11
***********************************
false & true
我现在在南京
num1 = 12
***********************************
false & false
我现在在南京
num1 = 13
***********************************
true & false
我现在在南京
num1 = 14
************ && ***************
true && true
我现在在北京
num1 = 15
***********************************
false && true
我现在在南京
num1 = 15
***********************************
false && false
我现在在南京
num1 = 15
***********************************
true && false
我现在在南京
num1 = 16
END ***********************************
- 对应程序测试
class LogicTest {
public static void main(String[] args) {
System.out.println("************ & ***************");
System.out.println("true & true");
boolean b1 = true;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("false & true");
boolean b2 = false;
if(b2 & (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("false & false");
boolean b3 = false;
if(b3 & (num1++ < 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("true & false");
boolean b4 = true;
if(b4 & (num1++ < 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("************ && ***************");
System.out.println("true && true");
boolean a1 = true;
if(a1 && (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("false && true");
boolean a2 = false;
if(a2 && (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("false && false");
boolean a3 = false;
if(a3 && (num1++ < 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
System.out.println("***********************************");
System.out.println("true && false");
boolean a4 = true;
if(a4 && (num1++ < 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
}
}
2.区分:|(或) 与 ||(短路或)
- 相同点1:| 与 || 的运算结果相同
- 相同点2:当符号左边是false时,二者都会执行符号右边的运算
- 不同点3:当符号左边是true时,|继续执行符号右边的运算,而||不再执行符号右边的运算
- 开发中,推荐使用||
- 将上述测试文件&修改|即可,不做重复。
//北京表示进入if()
//南京表示进入else()
|
true | true YES true
false | true YES true
false | false NO false
true | false YES true
左为假,|/||左右都运算;
左为真,|左右都运算;||左运算;
||
true | true YES true
false | true YES true
false | false NO false
true | false YES true
---------- java ----------
************ | ***************
true | true
我现在在北京
num1 = 11
***********************************
false | true
我现在在北京
num1 = 12
***********************************
false | false
我现在在南京
num1 = 13
***********************************
true | false
我现在在北京
num1 = 14
************ || ***************
true || true
我现在在北京
num1 = 14
***********************************
false || true
我现在在北京
num1 = 15
***********************************
false && false
我现在在南京
num1 = 16
***********************************
true || false
我现在在北京
num1 = 16
END ***********************************