java中switch分支合并有两种写法:传统式用连续case无break实现贯穿,新式(java 14+)用->配合|合并多值,二者不可混用,且新式要求穷尽覆盖或default兜底。

传统写法:多个 case 共享代码块(无 break 贯穿)
把多个 case 标签连续写、不加 break,后面接统一的执行逻辑。适用于 Java 所有版本。
- case 值必须是编译期常量(如字面量、static final 字段)
- 所有值类型需与 switch 表达式类型兼容
- 最后一个分支后必须有 break(或 return/throw 等终止语句),否则会穿透到 default 或后续逻辑
示例:
char grade = 'B';
switch (grade) {
case 'A':
case 'B':
case 'C':
System.out.println("通过");
break;
case 'D':
case 'E':
System.out.println("不通过");
break;
default:
System.out.println("无效成绩");
}
Java 14+ 表达式式写法:用竖线 | 合并多个标签
使用 -> 语法时,多个值用 | 连接,中间不能有逗号,也不能混用冒号 :。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 所有值必须是同类型、编译期可确定的常量(如
1 | 2 | 3、"a" | "b"、CONST_X | CONST_Y) - 不允许出现变量、null、不同类型的混合(如
1 | "a"报错) - 整个 switch 必须统一用 ->,不能夹杂
: yield分支
示例:
String result = switch (day) {
case 1 | 2 | 3 -> "工作日早";
case 4 | 5 -> "工作日晚";
case 6 | 7 -> "周末";
default -> "未知";
};
关键区别和避坑点
两种写法本质不同,选一种就要贯彻到底:
- 传统写法靠“无 break”实现合并,依赖 fall-through 行为
- 新式写法用 | 是语法级合并,每个分支独立、无穿透,更安全
- 混用
case 1 | 2 -> ...和case 3: yield ...会直接编译失败 - 表达式式 switch 必须有返回值,且所有分支类型要能统一推导(比如不能有的返回 String,有的返回 int)
什么时候该用哪一种
日常维护老项目或需兼容低版本 JDK → 用传统多 case 贯穿写法
新项目、JDK ≥ 14、追求表达力与安全性 → 优先用 -> + | 表达式式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










