Java switch支持的數(shù)據(jù)類型詳解
switch支持的數(shù)據(jù)類型
隨著Java的不斷發(fā)展,switch支持的數(shù)據(jù)類型也有了變化,下面就來講述switch如何來實(shí)現(xiàn)對(duì)新增數(shù)據(jù)類型的支持。
支持的數(shù)據(jù)類型
- 基本數(shù)據(jù)類型:int,byte,short,char
- 基本數(shù)據(jù)類型封裝類:Integer,Byte,Short,Character
- 枚舉類型:Enum(JDK 5+開始支持)
- 字符串類型:String(JDK 7+ 開始支持)
實(shí)現(xiàn)
switch底層是使用int類型來判斷的,int類型是四個(gè)字節(jié)的整數(shù)型類型,所以只要字節(jié)小于或等于4的整數(shù)型類型都是可以轉(zhuǎn)化成int類型的,所以支持byte[1字節(jié)],short[2字節(jié)]都是可以理解的,long[8字節(jié)]超出了int的范圍,因而不支持。
關(guān)于枚舉和字符(串)也是轉(zhuǎn)化為int類型間接實(shí)現(xiàn)的。
關(guān)于這一點(diǎn),我們可以驗(yàn)證的,下面舉例驗(yàn)證switch如何實(shí)現(xiàn)對(duì)枚舉數(shù)據(jù)類型的支持。
直接上代碼:
public class SwitchTest { public static void main(String[] args) { Color color = Color.YELLOW; switch (color) { case RED: System.out.println("RED:" + color.getName()); break; case YELLOW: System.out.println("GREEN:" + color.getName()); break; case BLUE: System.out.println("BLUE:" + color.getName()); break; case BLANK: System.out.println("BLANK:" + color.getName()); break; default: System.out.println("DEFAULT"); break; } } public enum Color { RED("紅色", 1), YELLOW("綠色", 2), BLUE("藍(lán)色", 3), BLANK("黑色", 4); private String name; private int index; private Color(String name, int index) { this.name = name; this.index = index; } public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } }
編譯后生成了SwitchTest Color.class和SwitchTest.class 兩個(gè)文件,打開編譯成SwitchTest.class的過渡文件SwitchTest Color.class和SwitchTest.class兩個(gè)文件,打開編譯成SwitchTest.class的過渡文件SwitchTest Color.class和SwitchTest.class兩個(gè)文件,打開編譯成SwitchTest.class的過渡文件SwitchTestColor.class:
我們發(fā)現(xiàn)多了一個(gè)數(shù)組Color[] arrayOfColor,原來枚舉是再編譯的過程中產(chǎn)生了一個(gè)新的數(shù)組,switch是通過轉(zhuǎn)化成數(shù)組的形式來實(shí)現(xiàn)對(duì)枚舉類型的支持。
我們通過相同的方式也可以看到switch對(duì)String類型的支持也是通過將String轉(zhuǎn)化為int類型得以實(shí)現(xiàn)的,這里就不再贅述。 switch對(duì)四種基本數(shù)據(jù)類型封裝類的支持是通過對(duì)封裝類的拆箱來實(shí)現(xiàn)的點(diǎn)擊了解
注意封裝類不能為null,否則會(huì)報(bào)空指針異常的。
switch支持的10種數(shù)據(jù)類型和注意事項(xiàng)
switch支持的數(shù)據(jù)類型
【切記不支持long、double、float及其包裝類型】
- 基本數(shù)據(jù)類型:char,byte, short, int
- 包裝數(shù)據(jù)類型: Character,Byte,Short,Integer
- 枚舉類型:Enum
- 字符串類型:String(Jdk 7+ 開始支持)
Color color = Color.RED; switch (color) { case RED: System.out.println("red"); break; case BLUE: System.out.println("blue"); break; case YELLOW: System.out.println("yellow"); break; default: System.out.println("default");
switch注意事項(xiàng)
- case 里面必須跟 break,不然程序會(huì)一個(gè)個(gè) case 執(zhí)行下去,直到最后一個(gè) break 的 case 或者 default 出現(xiàn)
- case 條件里面只能是常量或者字面常量,而且不能為null,否則編譯報(bào)錯(cuò)
- default 語(yǔ)句可有可無,最多只能有一個(gè)
- 建議在switch語(yǔ)句前判斷參數(shù)是否為null:switch的參數(shù)不能為null,否則會(huì)報(bào)空指針異?!緉ull的類型不確定】
public class Demo { public static void main(String[] args) { new Demo().go(null); } public void go(String str) { switch (str) { case "null": System.out.println("null"); break; case "123": System.out.println(123); break; default: System.out.println("default"); } } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring啟動(dòng)流程refresh()源碼深入解析
這篇文章主要給大家介紹了關(guān)于Spring啟動(dòng)流程refresh()源碼深入解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09springboot啟動(dòng)不加載bootstrap.yml文件的問題
這篇文章主要介紹了springboot啟動(dòng)不加載bootstrap.yml文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12mybatis-plus使用xml自定義sql語(yǔ)句方式
這篇文章主要介紹了mybatis-plus使用xml自定義sql語(yǔ)句方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Java項(xiàng)目中大批量數(shù)據(jù)查詢導(dǎo)致OOM的解決
本文主要介紹了Java項(xiàng)目中大批量數(shù)據(jù)查詢導(dǎo)致OOM的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Eclipse 2020-06 漢化包安裝步驟詳解(附漢化包+安裝教程)
這篇文章主要介紹了Eclipse 2020-06 漢化包安裝步驟(附漢化包+安裝教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08