Java 三元運算子
三元運算子(條件運算子)是 if-else 的簡短寫法,用於根據條件回傳不同的值。
語法
條件 ? 值1 : 值2
- 條件為
true時,回傳「值1」 - 條件為
false時,回傳「值2」
基本範例
int age = 20;
// if-else 寫法
String status;
if (age >= 18) {
status = "成年";
} else {
status = "未成年";
}
// 三元運算子寫法
String status2 = (age >= 18) ? "成年" : "未成年";
System.out.println(status2); // 成年
更多範例
取得最大值
int a = 10, b = 20;
int max = (a > b) ? a : b;
System.out.println(max); // 20
取得絕對值
int num = -5;
int abs = (num >= 0) ? num : -num;
System.out.println(abs); // 5
判斷奇偶
int number = 7;
String result = (number % 2 == 0) ? "偶數" : "奇數";
System.out.println(result); // 奇數
布林值轉換
boolean active = true;
String text = active ? "啟用" : "停用";
System.out.println(text); // 啟用
巢狀三元運算子
可以巢狀使用,但可讀性會下降:
int score = 85;
// 巢狀三元運算子
String grade = (score >= 90) ? "A" :
(score >= 80) ? "B" :
(score >= 70) ? "C" :
(score >= 60) ? "D" : "F";
System.out.println(grade); // B
較複雜的情況建議使用 if-else:
// 可讀性更好
String grade;
if (score >= 90) {
grade = "A";
} else if (score >= 80) {
grade = "B";
} else if (score >= 70) {
grade = "C";
} else if (score >= 60) {
grade = "D";
} else {
grade = "F";
}
實際應用
設定預設值
String name = null;
String displayName = (name != null) ? name : "Guest";
System.out.println(displayName); // Guest
// Java 9+ 可以使用 Objects.requireNonNullElse
String displayName2 = Objects.requireNonNullElse(name, "Guest");
格式化輸出
int count = 5;
String message = "你有 " + count + " 則" + (count > 1 ? "訊息" : "訊息");
System.out.println(message);
限制範圍
int value = 150;
int min = 0, max = 100;
// 確保值在範圍內
int clamped = (value < min) ? min : (value > max) ? max : value;
System.out.println(clamped); // 100
在方法中直接回傳
public boolean isAdult(int age) {
return age >= 18 ? true : false;
}
// 更簡潔的寫法
public boolean isAdult(int age) {
return age >= 18;
}
注意事項
型別必須相容
int a = 10;
// 編譯錯誤:型別不相容
// int result = (a > 5) ? "大" : 0;
// 正確:兩個值型別相同
String result = (a > 5) ? "大" : "小";
int result2 = (a > 5) ? 1 : 0;
括號的使用
int a = 5, b = 10;
// 建議使用括號增加可讀性
int max = (a > b) ? a : b;
// 不使用括號也可以
int max2 = a > b ? a : b;
三元運算子 vs if-else
| 情況 | 建議 |
|---|---|
| 簡單的賦值 | 三元運算子 |
| 複雜的邏輯 | if-else |
| 巢狀超過 2 層 | if-else |
| 執行多個語句 | if-else |
// 適合三元運算子
String status = isActive ? "啟用" : "停用";
// 適合 if-else
if (isActive) {
enableFeatures();
logStatus();
} else {
disableFeatures();
notifyAdmin();
}