邏輯運算符
1. 介紹
- 用于連接配接多個條件(多個關系表達式),最終的結果也是一個 boolean 值。
2. 邏輯運算符一覽
- 分為兩組學習
1) 短路與 && , 短路或 ||,取反 !
2) 邏輯與 &,邏輯或 |,^ 邏輯異或

- 說明邏輯運算規則:
1)
a&b
: & 叫邏輯與:規則:當 a 和 b 同時為 true ,則結果為 true, 否則為 false
2)
a&&b
: && 叫短路與:規則:當 a 和 b 同時為 true ,則結果為 true,否則為 false
3)
a|b
: | 叫邏輯或,規則:當 a 和 b ,有一個為 true ,則結果為 t
4)
a||b
: || 叫短路或,規則:當 a 和 b ,有一個為 true ,則結果為 true,否則為 false
5)
!a
: 叫取反,或者非運算。當 a 為 true, 則結果為 false, 當 a 為 false 是,結果為 true
6)
a^b
: 叫邏輯異或,當 a 和 b 不同時,則結果為 true, 否則為
3. && 和 & 基本規則
名稱 | 文法 | 特點 |
---|---|---|
短路與&& | 條件1&&條件2 | 兩個條件都為 true,結果為 true,否則 false |
邏輯與& | 條件1&條件2 |
4. && 和 & 案例示範
- 案例示範&& 和 & 運算符的使用(
)LogicOperator01.java
//&&短路與 和 &邏輯與 案例示範
int age = 50;
if(age > 20 && age < 90) {
System.out.println("ok100");
}
//&邏輯與使用
if(age > 20 & age < 90) {
System.out.println("ok200");
}
//差別
int a = 4;
int b = 9;
//對于&&短路與而言,如果第一個條件為false ,後面的條件不再判斷
if(a < 1 && ++b < 50) {
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b);// 4 9
//對于&邏輯與而言,如果第一個條件為false ,後面的條件仍然會判斷
if(a < 1 & ++b < 50) {
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b);// 4 10
5. || 和 | 基本規則
短路或 ` | ` | 條件1` | `條件2 | 兩個條件中隻要有一個成立,結果為true,否則為false |
邏輯或 ` | 隻要有一個條件成立,結果為true,否則為false |
6. || 和 | 案例示範
- 案例示範&& || 運算符的使用(LogicOperator02.java)。
//||短路或 和 |邏輯或 案例示範
//|| 規則: 兩個條件中隻要有一個成立,結果為true,否則為false
//| 規則: 兩個條件中隻要有一個成立,結果為true,否則為false
int age = 50;
if(age > 20 || age < 30) {
System.out.println("ok100");
}
//邏輯或| 的使用
if(age > 20 | age < 30) {
System.out.println("ok200");
}
- 邏輯或 | 和 短路或 || 差別:
//看看兩者的差別
//(1) ||短路或:如果第一個條件為true,則第二個條件不會判斷,最終結果為true,效率高
int a = 4;
int b = 9;
if( a > 1 || ++b > 4) {
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b); //4 9
//(2) |邏輯或:不管第一個條件是否為true,第二個條件都要判斷,效率低
int a = 4;
int b = 9;
if( a > 1 || ++b > 4) {
System.out.println("ok300");
}
System.out.println("a=" + a + " b=" + b); //4 10
7. || 和 | 使用差別
||
短路或:如果第一個條件為 true,則第二個條件不會判斷,最終結果為 true,效率高
|
邏輯或:不管第一個條件是否為 true,第二個條件都要判斷,效率低
3) 開發中,我們基本使用 ||
8. ! 取反 基本規則
! 非(取反) | ! 條件 | 如果條件本身成立,結果為false,否則為true |
9. ! 案例示範
- 案例示範
和!
案例示範運算符的使用(InverseOperator.java)^
//! 操作是取反 T->F , F -> T
System.out.println(60 > 20); //T
System.out.println(!(60 > 20)); //F
//a^b: 叫邏輯異或,當 a 和 b 不同時,則結果為true, 否則為false
boolean b = (10 > 1) ^ ( 3 > 5);
System.out.println("b=" + b);//T
10. ^ 異或 案例示範
-
:a^b
叫邏輯異或,當 a 和 b 不同時,則結果為 true, 否則為 false^
System.out.println( (4 < 1) ^ (6 > 3) ); // True
11. 練習 1
- 分析:if條件中,x先比較後自增,是以
為x++==6
,此時 x 自增後為 6。false
是先自增再比較,此時 y = 6 ,比較的結果為 true。最後if條件的結果為++y
false
int x = 5;
int y = 5;
if (x++==6 & ++y==6){
x = 11;
}
System.out.println("x="+x+",y"+y);
- 是以最後結果為 x = 6,y = 6
- 分析:if條件中x先比較後自增,
x++==6
,x自增後為 6 。因為是短路與&&,是以後面的false
不會再執行。最後if條件的結果為++y==6
false
int x = 5,y = 5;
if (x++==6 && ++y==6){
x = 11;
}
System.out.println("x="+x+",y="+y);
- 是以最後結果 x = 6,y = 5
- 分析:if條件中
中 x先比較再自增,是以x++==5
x++==5
,因為為 邏輯或true
,是以後面的判斷要執行。|
中y先自增再比較,此時++y==5
,是以y = 6
結果為++y==5
。最後if條件的結果為false
,就要執行true
x = 11
int x = 5,y = 5;
if (x++==5 | ++y==5){
x = 11;
}
System.out.println("x="+x+",y="+y);
- 是以最後結果 x = 11,y = 6
- 分析:if條件中,
中,x先比較再自增,此時x++==5
的結果為x++==5
,x 比較完成後自增為 6. 因為是短路或true
,是以後面的判斷不會執行。最後if條件的結果為||
true
x = 11
int x = 5,y = 5;
if (x++==5 || ++y==5){
x = 11;
}
System.out.println("x="+x+",y="+y);
}
- 是以最後結果 x = 11,y = 5
11. 練習 2
- 分析:
- 第一個if條件中, z為先判斷後自增,是以
為 true,此時z++==46
。z = 47
是把 true 指派給 y,此時y = true
y = true
的判斷結果為y = true
true
,就要執行 z++,此時true
z = 48
- 第二個if條件中,
指派為false
,此時x
x=false
,因為短路或false
,前面的條件為||
,是以後面的條件也要執行。false
中,z先自增再判斷,是以++z==49
x = 49
true
z++
z = 50
boolean x = true;
boolean y = false;
short z = 46;
if ((z++==46) && (y = true)) z++;
if ((x=false) || (++z==49)) z++;
System.out.println("z="+z);
- 是以最後結果 z = 50