可以是int 基本類型或Integer 包裝類型,由於,byte,short,char 都可以隱含轉換為int,所以這些類型以及這些類型的包裝類型也是可以的。顯然long 和String 類型都不符合switch 的語法規定,並且不能被隱式轉換成int 類型,所以它們不能作用於swtich 語句中。switch中可以是字符串類型,String(JDK1.7之后才可以作用在string上),switch中可以是枚舉類型(JDK1.5之后)。
問題一 : 為什么switch不可作用於long double float ,包括他們的包裝類?
簡單的回答是因為語法的規定。在實際編程中,極少有如此多的分支,以致需要使用Long類型。這樣的語法規定是語言設計者的折衷考慮,並不一定特別合理,語言規范也在不停演變。但截止目前的版本,Java的Swithch分支仍然不支持Long,在這種情況下,可以采取一些辦法:
1) 轉為int類型,范例如下:
final long value = System.currentTimeMillis() % 5;
switch ( (new Long(value)).intValue() ) //注意這行
{
case 1 : System.err.println("One");
break;
case 2 : System.err.println("Two");
break;
}
2) 放棄switch,改用 if/else 的寫法。
3) 放棄switch,改用 Map。
補充:語言的底層實現細節有時還真不完全清楚,Java新版本中Switch添加了對String的支持,如果要支持Long,也沒問題。誰知道他們是怎么想的^_^,作為語言的使用者,遵守規則即可。