Java switch支持的數據類型詳解

switch支持的數據類型

隨著Java的不斷發展,switch支持的數據類型也有瞭變化,下面就來講述switch如何來實現對新增數據類型的支持。

支持的數據類型

  • 基本數據類型:int,byte,short,char
  • 基本數據類型封裝類:Integer,Byte,Short,Character
  • 枚舉類型:Enum(JDK 5+開始支持)
  • 字符串類型:String(JDK 7+ 開始支持)

實現

switch底層是使用int類型來判斷的,int類型是四個字節的整數型類型,所以隻要字節小於或等於4的整數型類型都是可以轉化成int類型的,所以支持byte[1字節],short[2字節]都是可以理解的,long[8字節]超出瞭int的范圍,因而不支持。

關於枚舉和字符(串)也是轉化為int類型間接實現的。

關於這一點,我們可以驗證的,下面舉例驗證switch如何實現對枚舉數據類型的支持。

直接上代碼:

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("藍色", 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 兩個文件,打開編譯成SwitchTest.class的過渡文件SwitchTest Color.class和SwitchTest.class兩個文件,打開編譯成SwitchTest.class的過渡文件SwitchTest Color.class和SwitchTest.class兩個文件,打開編譯成SwitchTest.class的過渡文件SwitchTestColor.class:

在這裡插入圖片描述

我們發現多瞭一個數組Color[] arrayOfColor,原來枚舉是再編譯的過程中產生瞭一個新的數組,switch是通過轉化成數組的形式來實現對枚舉類型的支持。

我們通過相同的方式也可以看到switch對String類型的支持也是通過將String轉化為int類型得以實現的,這裡就不再贅述。 switch對四種基本數據類型封裝類的支持是通過對封裝類的拆箱來實現的點擊瞭解

註意封裝類不能為null,否則會報空指針異常的。

switch支持的10種數據類型和註意事項

switch支持的數據類型

【切記不支持long、double、float及其包裝類型】

  • 基本數據類型:char,byte, short, int
  • 包裝數據類型: 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註意事項

  • case 裡面必須跟 break,不然程序會一個個 case 執行下去,直到最後一個 break 的 case 或者 default 出現
  • case 條件裡面隻能是常量或者字面常量,而且不能為null,否則編譯報錯
  • default 語句可有可無,最多隻能有一個
  • 建議在switch語句前判斷參數是否為null:switch的參數不能為null,否則會報空指針異常【null的類型不確定】
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");
        }
    }
}

在這裡插入圖片描述

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: