下面是switch的簡單寫法:
switch(A){case B;
}
A部分中的值必須是int型的,或者是能夠自動進行飲試轉換成int型的表達式。也就是說A部分可以是byte/short/char/int型的。
其次要強調的是該程序中B部分的值必須是單個byte/short/char/int型的值,或者是final型的變量。
但是final型的變量也是有要求的,也即是它必須是編譯時的常量,怎么講呢,看下面的程序段:
final int a = 0;
final int b;
第二個語句就是在編譯時不能夠被識別出值的變量,因為它沒有初始化,當然,這條語句也是錯誤的。
所以總結case后的值可以是常數值或final型的值。
再看下面的程序段:
public class TestSwitch {
public static void main(String[] args){
byte a = 11;
switch(a){// C
case 11 : System.out.println(" 11 "); break;
case 225 : System.out.println(" 11 "); break;// D
}
}
}
該代碼正確嗎?答案是否定的。雖然在 C 處是合法的也即是byte型的a值可以出現在switch中,但是 D處的語句也即是第二個case后的值是225大小超過了byte的范圍,所以是錯誤的。再就是case后的值不能出現重復。因此在使用中要注意。
=====================
再就是在使用switch-case中最容易忽視的就是忘記在每個case后處理完后忘記寫上break;語句。那它帶來的后果是什么呢,下面小程序段會告訴你:
public class TestSwitchCase {
public static void main(String[] args){
byte a = 2;
switch(a){
case 1 : System.out.println(" A ");
case 2 : System.out.println(" B ");
case 3 : System.out.println(" C ");
case 4 : System.out.println(" D ");
default : System.out.println(" default ");
}
}
}
=========輸出結果為:
B
C
D
default
--------------------------
看到了嗎?連default都執行,注意結束符break;就OK了。