java 14+ 的 switch 语句支持箭头语法、多值合并、表达式返回、大括号+yield 多行逻辑及 java 17+ 模式匹配,要求 jdk≥14(推荐≥17),编译器强制全覆盖与类型安全。

Java 的 switch 语句已从早期的流程控制语句,演进为兼具表达能力与类型安全的现代结构。支持新特性不是“额外配置”,而是直接使用 Java 14+ 的语法规范——只要 JDK 版本 ≥14(推荐 ≥17),就能启用全部增强能力。
用箭头语法替代冒号 + break
传统写法依赖 break 防止穿透,漏写就出错;新写法用 -> 自动终止分支,语义清晰、零穿透风险。
- 单值分支:case "save" -> doSave();
- 多值合并:case "start", "resume" -> startJob();
- 禁止混用:一个 switch 块内不能同时出现 : 和 ->
作为表达式返回值,必须有确定结果
switch 不再只是执行动作,而是可赋值的表达式,编译器强制你覆盖所有可能路径。
- 枚举类型:必须列出全部常量,或加 default 分支
- String / Object 类型:default 分支不可省略,否则编译失败
- 示例:int days = switch (month) { case JAN, MAR -> 31; default -> 30; };
多行逻辑用大括号 + yield
当一个分支需要日志、校验、计算多个步骤时,用 { } 包裹,并以 yield 显式返回最终值。
- 不写 yield → 编译报错:“missing yield statement”
- 不能用 return 或 break 替代 yield
- 示例:case "DEBUG" -> { log("debug mode"); yield 100; }
结合模式匹配处理类型与 null
Java 17 起支持在 case 中直接解构对象并绑定变量,无需 instanceof + 强转,null 也可单独匹配。
- 类型匹配:case String s -> s.length()
- 守卫条件:case Integer i when i > 0 -> "positive"
- null 分支:case null -> "empty"(Java 17 预览特性,正式支持于 Java 21)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











