IT兄弟連 Java語法教程 流程式控制制語句 分支結構語句5
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/ITXDL123/article/details/95938136
5 switch-case條件語句
Java中的第二種分支控制語句時switch語句,switch語句提供了多路支援,因此可以使程式在多個選項中進行選擇。儘管一系列嵌套if語句可以執行多路測試,然而多數情況下使用switch則更為高效。其完整形式如下:
switch(expression){
case constant1:
statement sequence;
break;
case constan2:
statement sequence;
break;
…
…
default:
statement sequence;
}
對於JDK7之前的Java版本,switch表達式必須是byte、short、int、char類型或枚舉。從JDK7開始,表達式也可以是String類型,這意味著當前版本的Java可以使用字元串控制switch。通常,控制switch的表達式只是變數,而不是較大的表達式。
case語句中指定的每個值必須是唯一的常量表達式(例如字面值),重複的case值是不允許的。每個值得類型必須與switch表達式的類型兼容。
如果沒有與表達式的值相匹配的case常量,就執行default語句,default語句是可選的,如果沒有該語句,那麼當所有的匹配都不成功時,就不會發生任何動作。當找到一個匹配時,就執行與該匹配相關的語句,直到遇到break為止。對於default或最後一個case,則執行到switch語句的末尾。
例:下面的程式演示了switch語句:
public class SwitchDemo{
public static void main(String[] args){
char score = 'C';
switch (score) {
case 'A':
System.out.println("優秀");
break;
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("中等");
break;
case 'D':
System.out.println("及格");
break;
default:
System.out.println("不及格");
}
}
}
編譯並運行這個程式,在控制台將顯示如圖8所示的資訊。

圖8 SwitchDemo運行結果
通過運行結果可以看到,程式在控制台輸出了「中」,這是完全正確的,字元表達式score的值為「C」,對應的結果為「中等」。
在case標籤後的每個程式碼塊後都有一條break語句,這是Java中的關鍵字,break語句有著極其重要的意義,Java的switch語句允許case後程式碼塊中沒有break語句,但是這種做法可能會引入一個陷阱。如果把上面程式中的break語句都注釋掉,將看到以下結果:
public class SwitchDemo{
public static void main(String[] args){
char score = 'C';
switch (score) {
case 'A':
System.out.println("優秀");
case 'B':
System.out.println("良好");
case 'C':
System.out.println("中等");
case 'D':
System.out.println("及格");
default:
System.out.println("不及格");
}
}
}
重新編譯並運行這個程式,控制台向顯示如圖9所示的資訊。

圖9 去掉break後SwitchDemo運行結果
這個運行結果看起來很奇怪,但這正是有switch語句運行流程決定的:switch語句會先求出expression表達式的值,然後拿這個表達式和case標籤後的值進行比較,一旦遇到相等的值,程式就開始執行這個case標籤後的程式碼,不再判斷與後面case、default標籤的條件是否匹配,除非遇到break才會結束。
JDK7增強了switch語句的功能,允許switch語句的控制表達式是java.lang.String類型的變數或表達式,但是只能是java.lang.String類型,不能是StringBuffer或者StringBuilder這兩種字元串類型。