switch (表達式) {
case 值1:
功能代碼1;
[break;]
case 值2:
功能代碼2;
[break;]
...
default:
功能代碼;
[break;]
}
byte、short、char、int 四種(Java 7+ 支援 String,Java 12+ 支援模式匹配)。case 後接常數或常量,不可為變數。break 可選,用於結束 switch;缺失時會「貫穿」執行後續 case。case 可任意多個。default 位置任意,功能類似 else。表達式值與某 case 值匹配 → 從該處向下執行 → 遇 break 或 switch 結束才停止。
int month = 10, days = 0;
switch (month) {
case 1: days = 31; break;
case 2: days = 28; break;
case 3: days = 31; break;
case 4: days = 30; break;
case 5: days = 31; break;
case 6: days = 30; break;
case 7: days = 31; break;
case 8: days = 31; break;
case 9: days = 30; break;
case 10: days = 31; break;
case 11: days = 30; break;
case 12: days = 31; break;
}
System.out.println(days);
int month = 10, days = 0;
switch (month) {
case 2:
days = 28; break;
case 4: case 6: case 9: case 11:
days = 30; break;
default:
days = 31;
}
System.out.println(days);
利用貫穿特性合併 30 天月份,其餘歸 default,代碼極度精簡。
switch 僅支援等值比較,但可透過數學轉換處理區間。例:分數 0-100 轉等級(A:90-100, B:80-89...)。
int score = 87;
switch (score / 10) { // 取十位數,將 0-100 映射為 0-10
case 10:
case 9:
System.out.println('A'); break;
case 8:
System.out.println('B'); break;
case 7:
System.out.println('C'); break;
case 6:
System.out.println('D'); break;
default:
System.out.println('E');
}
注意:複雜區間判斷仍建議用 if-else if-else,switch 強項在「離散值等值匹配」。
| 維度 | if-else if-else | switch |
|---|---|---|
| 適用場景 | 任意條件(區間、複合邏輯) | 離散值等值匹配 |
| 結構清晰度 | 條件多時顯冗長 | 結構清晰、易讀 |
| 執行效率 | 順序判斷,稍慢 | 跳轉表優化,稍快 |
實務中視邏輯類型靈活選擇。