1. 布林資料型別:boolean
如前所見,Java 有個很實用的運算子——if-else。當括號中的條件為真時會執行第一個指令區塊,為假時則執行第二個指令區塊。
為了方便處理可能為真或為假的運算式,Java 提供了特殊型別——boolean。它的主要特點在於,此型別的變數只能取兩個值:true(真)與 false(假)。
無法將任何其他值賦給 boolean 型別的變數。編譯器不會允許。
boolean 型別變數的範例:
boolean isAdult = true;
boolean hasMoney = false;
boolean 變數只有兩個值——true 與 false。就這樣!幾乎就像測試結果——不是「通過」,就是「失敗」。
2. 比較運算
那這麼原始的型別有什麼用呢?boolean 的真正威力在於我們構造邏輯運算式時。通常會用比較運算子來得到這些運算式。
| 運算子 | 用途 | 範例 | 結果 |
|---|---|---|---|
| == | 等於 | |
true 或 false |
| != | 不等於 | |
true 或 false |
| > | 大於 | |
true 或 false |
| < | 小於 | |
true 或 false |
| >= | 大於或等於 | |
true 或 false |
| <= | 小於或等於 | |
true 或 false |
範例:
int age = 20;
boolean isAdult = age >= 18; // true(20 大於或等於 18)
boolean isTeenager = age >= 13 && age < 18; // false(20 不小於 18)
boolean isEven = age % 2 == 0; // true(20 可被 2 整除,無餘數)
這裡 isAdult 會變成 true,因為 20 的確是「成年」年齡。
重點 1:
由兩個字元組成的運算子不能拆開。
a < = 10
speed > = max
age = = 18
time ! = 0
重點 2:
請注意,沒有 => 與 =< 這兩個運算子;只有 <= 與 >=。如果你寫下 a =< 3,你的程式就不會通過編譯。
重點 3:
在 Java 中,你不能寫出像 18 < age < 65 這樣的運算式。因為 18 < age 的結果是 true 或 false。而將 true 與數字(65)相比較是不允許的——型別不同。
3. 邏輯運算
在 Java 語言中,不能寫出 18 < age < 65 這樣的運算式——它在語法上不正確,程式也不會被編譯。
不過可以這樣寫:
(18 < age) I (age < 65)
當然,我們實際上會使用邏輯運算子來代替文字。Java 提供三個邏輯運算子:AND(且)、OR(或)與 NOT(非)。
好消息:使用括號可以構造任意複雜的邏輯運算式。
壞消息:在 Java 中,不使用 and、or、not 這些單詞,而是使用 C 系語言的符號:&&、||、!。
| 邏輯運算子 | 期待 | 實際 |
|---|---|---|
| 且 (∧) | and | && |
| 或 (∨) | or | || |
| 非 (¬) | not | ! |
以下是一些在 Java 中使用邏輯運算子的範例:
| 運算式 | 譯解 | 說明 |
|---|---|---|
|
(0 < a) and (a < 100) | (0 < a) 且 (a < 100) |
|
(not a) and (not b) | (非 a) 且 (非 b) |
|
not((not a) or (not b)) | 非((非 a)或(非 b)) |
4. 真值表
簡要回顧一下邏輯運算。
AND 運算子
AND 運算子,也就是 &&,亦稱為合取、邏輯乘法。
| 運算式 | 結果 |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
OR 運算子
OR 運算子,也就是 ||,亦稱為析取、邏輯加法。
| 運算式 | 結果 |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
NOT 運算子
NOT 運算子,也就是 !,亦稱為反相(否定)。
| 運算式 | 結果 |
|---|---|
| ! true | false |
| ! false | true |
有用的等價式:
| 運算式 | 結果 |
|---|---|
| m && !m | false |
| m || !m | true |
| !(a && b) | !a || !b |
| !(a || b) | !a && !b |
5. 邏輯運算範例:and、or、not
「且」運算(AND),以 && 表示
只有兩個條件都為真,結果才為真。
int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true(16 大於 14 且有票)
如果你已滿 14 歲且有票——請進!
「或」運算(OR),以(||)表示
只要至少一個條件為真,結果就為真。
boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true(只要其中任一為 true,就可編輯)
如果你是管理員或版主——請放心按按鈕!
「非」運算(NOT),以(!)表示
反相會把真變為假,反之亦然。
boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true(若非週末,就要上班)
如果不是週末——該起床了!
組合運用:建構任意複雜的條件
你可以任意組合多個邏輯運算(但別過度複雜化)。為了清楚起見,可以(而且應該)使用括號。
範例:
int age = 17;
boolean hasTicket = false;
boolean isVip = true;
boolean canGo = (age >= 18 && hasTicket) || isVip; // true,因為 isVip = true
邏輯:如果此人已成年且有票,或者他是 VIP——就放行。若不是 VIP——只有在已成年且有票時才放行。
GO TO FULL VERSION