Java 14+支持switch用逗号分隔多个常量共享分支(如case 1,2,3->),需用->且值为编译期常量;旧版本靠fall-through实现,易出错;替代方案有if-else或Set.contains()。

Java 中 switch 语句本身不支持直接“匹配多个值”(比如 case 1, 2, 3: 这种写法在旧版本中是非法的),但自 Java 14 起引入了增强型 switch(预览特性),Java 15 正式成为标准,Java 17 全面可用——它支持用逗号分隔多个常量来共享同一个分支逻辑。
Java 14+:用逗号分隔多个 case 值
这是最简洁、推荐的方式。多个常量用逗号隔开,共用一个分支体,且必须以 -> 结尾(不能用冒号):
int day = 6;
switch (day) {
case 1, 2, 3, 4, 5 -> System.out.println("工作日");
case 6, 7 -> System.out.println("周末");
default -> System.out.println("无效日期");
}
注意:这种写法要求所有 case 值必须是编译期常量(如字面量、static final 变量),且类型需与 switch 表达式兼容(int、String、枚举等)。
Java 13 及之前:用空 case “穿透”实现等效效果
老版本中,可通过省略 break 让多个 case 共享后续代码块(fall-through):
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
int score = 85;
switch (score / 10) { // 转为 0–10 的整数
case 10:
case 9:
case 8:
System.out.println("优秀");
break;
case 7:
case 6:
System.out.println("合格");
break;
default:
System.out.println("不合格");
}
⚠️ 风险提示:漏写 break 容易引发逻辑错误;建议加注释说明意图,或改用 if-else 提高可读性。
替代方案:用 if-else 或 Set.contains() 判断多个值
当值较多、动态生成或类型不满足 switch 要求(如 double、自定义对象)时,更灵活的做法是:
- 用
if (Set.of(1, 2, 3, 5, 8).contains(x))(Java 9+) - 或传统
if (x == 1 || x == 2 || x == 3)(适合少量值) - 对字符串等,也可用
Arrays.asList(...).contains()(注意性能和 null 安全)
常见误区提醒
× 不要写成 case 1 || 2: —— 语法错误,switch 的 case 后只能是常量表达式,不能是布尔运算。
× Java 不支持区间匹配(如 case 1..10:),那是 Kotlin 或某些 DSL 的特性,Java 原生 switch 没有。
× 枚举 switch 中多个 enum 常量同样支持逗号分隔(如 case RED, GREEN, BLUE ->)

















