Java 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 C o l o r . c l a s s 和 S w i t c h T e s t . c l a s s 两 个 文 件 , 打 开 编 译 成 S w i t c h T e s t . c l a s s 的 过 渡 文 件 S w i t c h T e s t Color.class和SwitchTest.class两个文件,打开编译成SwitchTest.class的过渡文件SwitchTest Color.classSwitchTest.classSwitchTest.classSwitchTestColor.class:

Java switch支持的数据类型_第1张图片
我们发现多了一个数组Color[] arrayOfColor,原来枚举是再编译的过程中产生了一个新的数组,switch是通过转化成数组的形式来实现对枚举类型的支持。
我们通过相同的方式也可以看到switch对String类型的支持也是通过将String转化为int类型得以实现的,这里就不再赘述。
switch对四种基本数据类型封装类的支持是通过对封装类的拆箱来实现的点击了解
注意封装类不能为null,否则会报空指针异常的。

你可能感兴趣的:(Java)