在 Java 的不同版本中,switch 语句支持的数据类型有所变化和扩展。以下是各版本支持的情况:
Java 7 及之前版本
switch 语句支持以下数据类型:
-
整型:
-
byte
-
short
-
int
-
char
(本质上也是整型)
-
-
枚举类型 (enum)
-
包装类 (自动拆箱):
-
Byte
-
Short
-
Integer
-
Character
-
Java 7 新增支持
-
String 类型 (Java 7+)
Java 12+ (预览特性,正式在 Java 14)
-
表达式形式 (使用
->
箭头语法) -
多值匹配 (用逗号分隔)
-
yield 返回值 (switch 表达式)
Java 17+
-
模式匹配 (预览特性):
-
支持类型匹配 (instanceof 模式)
-
支持记录模式 (Record patterns)
-
完整支持列表
数据类型 | 支持版本 | 示例 |
---|---|---|
byte | 1.0+ | byte b = 1; switch(b){...} |
short | 1.0+ | short s = 2; switch(s){...} |
int | 1.0+ | int i = 3; switch(i){...} |
char | 1.0+ | char c = 'A'; switch(c){...} |
enum | 5.0+ | enum Color{RED,GREEN}; switch(color){...} |
String | 7.0+ | String s = "hello"; switch(s){...} |
Byte | 1.5+ (自动拆箱) | Byte b = 1; switch(b){...} |
Short | 1.5+ (自动拆箱) | Short s = 2; switch(s){...} |
Integer | 1.5+ (自动拆箱) | Integer i = 3; switch(i){...} |
Character | 1.5+ (自动拆箱) | Character c = 'A'; switch(c){...} |
注意事项
-
不支持的类型:
-
long、float、double 及其包装类
-
boolean 类型
-
所有其他引用类型(除了 String 和 enum)
-
-
Null 检查:
String s = null; switch(s) { // 抛出 NullPointerException case "hello": ... }
-
case 标签要求:
-
必须是编译时常量
-
不能有重复的 case 值
-
Java 12+ 支持多值 case:
case 1, 2, 3:
-
-
**新版 switch 表达式示例 (Java 14+):
int num = 2; String result = switch(num) { case 1 -> "One"; case 2 -> "Two"; case 3 -> "Three"; default -> "Unknown"; };
-
模式匹配示例 (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 版本特性。