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"); } } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot JavaMailSender发送邮件功能
这篇文章主要为大家详细介绍了SpringBoot JavaMailSender发送邮件功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-04-04springboot2.0 @Slf4j log 彩色日志配置输出到文件
这篇文章主要介绍了springboot2.0 @Slf4j log日志配置输出到文件(彩色日志),解决方式是使用了springboot原生自带的一个log框架,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下2023-08-08Spring Boot 配置 IDEA和DevTools 热部署的方法
这篇文章主要介绍了Spring Boot 配置 IDEA和DevTools 热部署的方法,需要的朋友可以参考下2018-02-02解决Nacos在执行startup.cmd的时候出现闪退的问题
因为在工作中的项目中需要使用到nacos作为注册中心,但是在使用nacos的过程中运行startup.cmd的时候出现了闪退的情况,运行startup.cmd闪一下就没有了,我把解决这个问题的全过程理了一下,希望能帮到您,需要的朋友可以参考下2023-12-12
最新评论