从 Java 8 到 Java 25 的 Switch 语句演进历程
·
| Java版本 | 新特性/增强内容 |
|---|---|
| Java 8 | 传统 switch 语句,支持 byte、short、char、int 及其包装类型,枚举类型和 String 类型 |
| Java 14 | JEP 361: Switch 表达式(标准特性)- 引入箭头语法和表达式形式 |
| Java 17 | JEP 406: Switch 模式匹配(预览)- 允许在 switch 中使用类型模式匹配 |
| Java 21 | Switch 模式匹配(预览)- 继续完善模式匹配功能 |
| Java 25 | JEP 507: 基本类型模式匹配(第三预览版)- 扩展模式匹配到基本类型 |
功能详细介绍
1. Java 8 及之前版本 - 传统 Switch 语句
在 Java 8 及之前的版本中,switch 语句只支持有限的数据类型:
- 基本整数类型:byte、short、char、int
- 对应的包装类型:Byte、Short、Character、Integer
- 枚举类型
- String 类型(从 Java 7 开始支持)
传统 switch 语句存在一些限制和不足:
- 需要使用 break 语句防止穿透(fall-through)
- 不能作为表达式返回值
- 不支持复杂的模式匹配
// 传统 switch 语句示例
String day = "MONDAY";
String result;
switch (day) {
case "MONDAY":
case "TUESDAY":
case "WEDNESDAY":
case "THURSDAY":
case "FRIDAY":
result = "Weekday";
break;
case "SATURDAY":
case "SUNDAY":
result = "Weekend";
break;
default:
result = "Unknown";
break;
}
2. Java 14 - Switch 表达式 (JEP 361)
Java 14 将 switch 表达式从预览特性转为标准特性,引入了重大改进:
- 箭头语法:使用
->替代传统的:,自动避免穿透问题 - 表达式形式:switch 可以作为表达式返回值
- 代码块支持:可以使用
{}包含多个语句,并使用yield返回值
// 使用箭头语法的 switch 表达式
String day = "MONDAY";
String result = switch (day) {
case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -> "Weekday";
case "SATURDAY", "SUNDAY" -> "Weekend";
default -> "Unknown";
};
// 使用代码块的 switch 表达式
int numLetters = switch (day) {
case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
case "TUESDAY" -> 7;
case "THURSDAY", "SATURDAY" -> 8;
case "WEDNESDAY" -> 9;
default -> {
System.out.println("Invalid day: " + day);
yield -1;
}
};
3. Java 17 - Switch 模式匹配 (JEP 406)
Java 17 引入了 switch 模式匹配的预览版本,这是一个重要的增强功能:
- 类型模式匹配:可以在 switch 中直接进行类型检查和转换
- instanceof 模式匹配:结合 instanceof 操作符使用模式变量
// Switch 模式匹配示例
static String format(Object obj) {
return switch (obj) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> obj.toString();
};
}
4. Java 21 - Switch 模式匹配增强
Java 21 继续完善 switch 模式匹配功能,提供了更强大的模式匹配能力:
- 改进的类型检查:更精确的类型推断和检查
- 增强的模式语法:支持更复杂的模式组合
5. Java 25 - 基本类型模式匹配 (JEP 507)
Java 25 进一步扩展了模式匹配的能力,支持基本类型:
- 基本类型支持:允许在 instanceof 和 switch 中直接使用基本类型
- 更自然的语法:简化了基本类型的模式匹配代码
// Java 25 中的基本类型模式匹配示例
static void test(Object obj) {
// 在 instanceof 中使用基本类型模式
if (obj instanceof int i) {
System.out.println("It's an int: " + i);
}
// 在 switch 中使用基本类型模式
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case int i -> System.out.println("int: " + i); // 基本类型模式
case String s -> System.out.println("String: " + s);
default -> System.out.println("Other: " + obj);
}
}
总结
Switch 语句从 Java 8 到 Java 25 经历了显著的演进:
- Java 14 的 switch 表达式是第一个重大改进,引入了更简洁的语法和表达式能力
- Java 17 开始的模式匹配预览是第二个重要里程碑,允许类型检查和转换直接在 switch 中进行
- Java 21-25 持续完善模式匹配功能,特别是扩展到基本类型支持
这些改进使 switch 语句变得更加强大、简洁和安全,减少了传统 switch 语句中常见的错误(如忘记 break 语句),同时提供了更强大的模式匹配能力,使代码更加清晰和易读。
更多推荐



所有评论(0)