Java 14+ 的 switch 表达式支持多标签合并、箭头语法和类型安全返回,自动阻断穿透,需统一返回类型,多行逻辑用 yield 显式返回。

Java 新版(Java 14+)中,多个 case 合并更简洁、类型更安全,核心是支持多标签写法和表达式模式,不再依赖 break 穿透逻辑。
多值合并语法(Java 12+ 表达式模式)
使用逗号分隔多个常量,配合 -> 箭头语法,自动阻断穿透,无需 break:
-
字符串角色判断:
switch (role) {<br> case "admin", "administrator" -> System.out.println("管理权限");<br> case "user", "guest" -> System.out.println("普通权限");<br> default -> System.out.println("未知角色");<br>} -
枚举状态归类:
switch (status) {<br> case PENDING, PROCESSING -> System.out.println("进行中");<br> case COMPLETED, ARCHIVED -> System.out.println("已完成");<br> default -> throw new IllegalStateException("不支持状态");<br>}
Switch 表达式返回统一类型(Java 14+)
多个 case 必须返回兼容类型,编译器会做类型推导;若混用 int 和 long,会报错:
- ✅ 正确(都推导为 Integer):
Integer result = switch (n) {<br> case 0, 1 -> 0;<br> case 2, 3 -> 1;<br> default -> -1;<br>}; - ❌ 错误(int 与 long 不兼容):
case 0, 1 -> 0; // int<br>case 2, 3 -> 0L; // long → 编译失败
复合语句块与 yield(Java 13+)
当一个合并 case 需要多行逻辑,用大括号包裹,并用 yield 显式返回值:
立即学习“Java免费学习笔记(深入)”;
String level = switch (score) {<br> case 90, 95, 100 -> "优秀";<br> case 80, 85 -> {<br> System.out.println("良好,额外记录日志");<br> yield "良好";<br> }<br> default -> "待提升";<br>};
注意事项
旧式穿透写法(省略 break)在新表达式模式下已不适用;若仍用传统语句式 switch,合并 case 仍可沿用老方法,但建议统一迁移到箭头语法——更安全、更易读、更少出错。


















