Java switch支持的数据类型详解

 更新时间:2021年10月11日 09:49:34   作者:加载中巛  
这篇文章主要介绍了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");
        }
    }
}

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解析java.library.path和LD_LIBRARY_PATH的介绍与区别

    解析java.library.path和LD_LIBRARY_PATH的介绍与区别

    这篇文章主要介绍了java.library.path和LD_LIBRARY_PATH的介绍与区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Spring Boot 安全 API 构建之加密解密功能的实践记录

    Spring Boot 安全 API 构建之加密解密功能的实践记录

    本文详述了如何在SpringBoot3.3环境中实施API加密的最佳实践,包括选择合适的加密算法,密钥管理,数据加密,防止加密漏洞,安全日志记录,测试和监控等方面,同时,文章也对RSA非对称加密和AES对称加密的实现步骤进行了详细的解析
    2024-10-10
  • Java中的延迟队列DelayQueue源码解析

    Java中的延迟队列DelayQueue源码解析

    这篇文章主要介绍了Java中的延迟队列DelayQueue源码解析,DelayQueue是一个支持并发的无界延迟队列,队列中的每个元素都有个预定时间,当线程从队列获取元素时,只有到期元素才会出队列,没有到期元素则阻塞等待,需要的朋友可以参考下
    2023-12-12
  • java中i=i++和j=i++的区别小结

    java中i=i++和j=i++的区别小结

    这篇文章主要给大家介绍了关于java中i=i++和j=i++区别的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • JMeter导入自定义的Jar包的详解教程

    JMeter导入自定义的Jar包的详解教程

    这篇文章主要介绍了JMeter导入自定义的Jar包的详解教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot增强Controller方法@ControllerAdvice注解的使用详解

    SpringBoot增强Controller方法@ControllerAdvice注解的使用详解

    这篇文章主要介绍了SpringBoot增强Controller方法@ControllerAdvice注解的使用详解,@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller进行增强处理,需要的朋友可以参考下
    2023-10-10
  • JAVA对字符串进行32位MD5加密的实践

    JAVA对字符串进行32位MD5加密的实践

    本文主要介绍了JAVA对字符串进行32位MD5加密的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java数据结构之堆(优先队列)详解

    Java数据结构之堆(优先队列)详解

    堆(优先队列)是一种典型的数据结构,其形状是一棵完全二叉树,一般用于求解topk问题。本文将利用Java语言实现堆,感兴趣的可以学习一下
    2022-07-07
  • Spring AOP的五种通知方式代码实例

    Spring AOP的五种通知方式代码实例

    这篇文章主要介绍了Spring AOP的五种通知方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringBoot项目yml配置文件不自动提示解决方案

    SpringBoot项目yml配置文件不自动提示解决方案

    这篇文章主要介绍了SpringBoot项目配置文件.yaml/.yml文件编写时没有自动提示的解决方案,文章通过图文结合的方式给大家讲解的非常详细,需要的朋友可以参考下
    2024-06-06

最新评论