條件控制是程式邏輯的基石。Java 提供 if-else 與 switch 兩大機制,適用於不同複雜度的分支決策。
if (布林表達式) {
// 為真時執行
} else {
// 為假時執行
}
int score = 85;
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';
執行規則:由上而下評估,第一個符合條件的區塊執行後,跳過其餘。
if (user.isLoggedIn()) {
if (user.hasPermission("ADMIN")) {
// 管理員功能
} else {
// 一般使用者功能
}
}
switch (條件表達式) {
case 常數值1:
陳述句;
break; // 關鍵:防止 fall-through
case 常數值2:
陳述句;
break;
default:
陳述句;
}
| Java 版本 | 支援型別 |
|---|---|
| 1.0~1.4 | int, short, byte, char |
| 5.0 | + enum 列舉型別 |
| 7.0 | + String |
| 12+ (preview) / 14+ (標準) | switch 表達式、型別模式匹配 |
// 箭頭語法:無 fall-through,可直接回傳值
String result = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> "6";
case TUESDAY -> "7";
case THURSDAY, SATURDAY -> "8";
case WEDNESDAY -> "9";
default -> throw new IllegalStateException("Invalid: " + day);
};
import java.io.IOException;
public class CharCounter {
public static void main(String[] args) throws IOException {
int digits = 0, spaces = 0, others = 0;
int ch;
while ((ch = System.in.read()) != '\n') {
switch (ch) {
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
digits++; break;
case ' ': case '\t':
spaces++; break;
default:
others++;
}
}
System.out.printf("數字:%d 空白:%d 其他:%d%n", digits, spaces, others);
}
}
| 特性 | if-else | switch |
|---|---|---|
| 條件型別 | 任意布林表達式 | 離散常數值(整數、字元、字串、enum) |
| 範圍判斷 | 支援(>、<、between) | 不支援(需列舉所有值) |
| 效能 | 線性評估 | JVM 可能優化為查找表/跳躍表 |
| 可讀性 | 少數條件適合 | 多固定值分支更清晰 |
NullPointerException,先檢查非空。default 避免未來新增值漏處理)。