switch 語句能否作用在 byte 上,能否作用在 long 上,能否作用在 String 上?為什么?


  可以是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,也沒問題。誰知道他們是怎么想的^_^,作為語言的使用者,遵守規則即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM