switch可应用于哪些数据类型上?

在 Java 的不同版本中,switch 语句支持的数据类型有所变化和扩展。以下是各版本支持的情况:

Java 7 及之前版本

switch 语句支持以下数据类型:

  1. 整型

    • byte

    • short

    • int

    • char (本质上也是整型)

  2. 枚举类型 (enum)

  3. 包装类 (自动拆箱):

    • Byte

    • Short

    • Integer

    • Character

Java 7 新增支持

  1. String 类型 (Java 7+)

Java 12+ (预览特性,正式在 Java 14)

  1. 表达式形式 (使用 -> 箭头语法)

  2. 多值匹配 (用逗号分隔)

  3. yield 返回值 (switch 表达式)

Java 17+

  1. 模式匹配 (预览特性)

    • 支持类型匹配 (instanceof 模式)

    • 支持记录模式 (Record patterns)

完整支持列表

数据类型支持版本示例
byte1.0+byte b = 1; switch(b){...}
short1.0+short s = 2; switch(s){...}
int1.0+int i = 3; switch(i){...}
char1.0+char c = 'A'; switch(c){...}
enum5.0+enum Color{RED,GREEN}; switch(color){...}
String7.0+String s = "hello"; switch(s){...}
Byte1.5+ (自动拆箱)Byte b = 1; switch(b){...}
Short1.5+ (自动拆箱)Short s = 2; switch(s){...}
Integer1.5+ (自动拆箱)Integer i = 3; switch(i){...}
Character1.5+ (自动拆箱)Character c = 'A'; switch(c){...}

注意事项

  1. 不支持的类型

    • long、float、double 及其包装类

    • boolean 类型

    • 所有其他引用类型(除了 String 和 enum)

  2. Null 检查

    String s = null;
    switch(s) {  // 抛出 NullPointerException
        case "hello": ...
    }

  3. case 标签要求

    • 必须是编译时常量

    • 不能有重复的 case 值

    • Java 12+ 支持多值 case:case 1, 2, 3:

  4. **新版 switch 表达式示例 (Java 14+):

    int num = 2;
    String result = switch(num) {
        case 1 -> "One";
        case 2 -> "Two";
        case 3 -> "Three";
        default -> "Unknown";
    };

  5. 模式匹配示例 (Java 17 预览)

    Object obj = "hello";
    switch(obj) {
        case Integer i -> System.out.println("Integer: " + i);
        case String s -> System.out.println("String: " + s);
        default -> System.out.println("Unknown");
    }

选择使用 switch 时,应考虑代码可读性和所支持的 Java 版本特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值