Switch能否用string做參數


 

在Java5以前,switch(expr)中,exper只能是byte,short,char,int類型(或其包裝類)的常量表達式。

從Java5開始,java中引入了枚舉類型,即enum類型。

從Java7開始,exper還可以是String類型。

但是long在所有版本中都是不可以的。

jdk1.7並沒有新的指令來處理switch string,而是通過調用switch中string.hashCode,將string轉換為int從而進行判斷。

hashcode返回的是int型
可以發現:進行switch的實際是hash值,然后用equals進行安全檢查(因為hash值可能會發生碰撞),所以性能不如枚舉。switch支持String其實是一個語法糖,在編譯后的字節碼文件中都會被還原成原生類型,並在相應位置插入了強制轉換代碼,底層的JVM在switch上並沒有修改。

當傳入switch的是null時,在運行時對一個null調用hashCode()方法,會拋出NullPointerException;如果case寫的是null,那么在編譯時無法求出hashcode,就會編譯報錯。


免責聲明!

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



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