java switch表达式自14起预览、15正式支持,以→替代:,自动终止分支、避免fall-through,支持yield返回值,要求default或穷尽匹配,适用于枚举、string等类型。

从 Java 14 开始(预览),Java 15 正式支持 switch 表达式(而非仅语句),它可以直接返回值,语法更简洁、安全,且能避免传统 switch 语句中常见的 break 遗漏和 fall-through 问题。
用箭头语法(->)替代冒号,自动终止分支
现代 switch 表达式使用 -> 分隔 case 值与结果,每个分支默认不穿透(no fall-through),无需写 break。表达式整体有明确类型,可直接赋值或返回。
例如:
String dayType = switch (day) {
case "Mon", "Tue", "Wed", "Thu", "Fri" -> "Weekday";
case "Sat", "Sun" -> "Weekend";
default -> "Unknown";
};
注意:default 分支必须存在(除非 switch 的枚举或 sealed 类已穷尽所有可能),否则编译报错。
支持多行代码块,用 yield 显式返回值
当某个分支需要执行多条语句时,可用花括号 {} 包裹,并用 yield 关键字指定返回值(不能用 return,那会退出整个方法)。
智能模型自动切换 V5.0.2 - 多模态感知,自动识别图片/视频/音频/代码/文本任务,切换最优模型。支持图片理解(qwen3-vl-plus)、视频音频(qwen3.5-plus)、代码(glm-5)、Office文档(MiniMax-M2.5)、推理等场景。零感知切换,无需手动操作。
-
yield只能在switch表达式内部使用 - 每个带大括号的分支必须至少有一个
yield
示例:
int score = switch (grade) {
case "A" -> 90;
case "B" -> {
System.out.println("Good job!");
yield 80; // 必须用 yield
}
case "C" -> 70;
default -> throw new IllegalArgumentException("Invalid grade: " + grade);
};
支持多种类型:枚举、字符串、基本类型、以及密封类(Java 17+)
现代 switch 表达式支持的类型包括:
-
byte、short、int、char及其包装类 -
String(自 Java 7 起支持,但表达式形式需 Java 14+) - 枚举类型(最常用、最安全)
- 密封类(
sealed class)及其允许的子类(Java 17+,配合switch可实现模式匹配式穷举)
例如枚举用法(推荐):
enum Color { RED, GREEN, BLUE }
String hex = switch (color) {
case RED -> "#FF0000";
case GREEN -> "#00FF00";
case BLUE -> "#0000FF";
};
与传统 switch 语句的关键区别
- 表达式有返回值;语句没有(或需靠变量临时存储)
- 箭头分支自动终止;冒号分支需手动
break,否则 fall-through - 编译器强制检查穷尽性(对枚举/密封类尤其严格)
- 不允许空分支(如
case X:后无内容),必须有->或{... yield; }
不复杂但容易忽略:确保 JDK 版本 ≥ 14(建议 ≥ 17),并在 javac 和 IDE 中启用对应语言级别(如 --source 17)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










