Java switch语句支持语句和表达式两种形式:语句形式需break防穿透,表达式形式用→自动终止并返回值;支持类型包括基本类型、String、enum及sealed类子类;case值须为编译期常量,null传入String易抛NPE。

Java中的switch语句用于多分支条件判断,比一连串if-else更清晰、高效(尤其在编译期可优化为跳转表时)。它从Java 14开始支持表达式形式(yield),Java 17起成为正式特性,但基础语法在早期版本就已稳定。
基本语法结构(语句形式)
传统switch是语句(statement),以red">break终止每个分支,防止“穿透”(fall-through):
- switch后括号内必须是可枚举类型:byte、short、char、int及其包装类;String(Java 7+);枚举类型(enum);或sealed类的子类(Java 21+)
- case值必须是编译期常量,不能是变量或运算表达式(如case x + 1: ❌)
- default分支可选,建议放在最后,不加break也不会出错,但习惯上仍写上
- 漏写break会导致执行完当前case后继续执行下一个case的代码(常见低级错误)
switch表达式(推荐用法,Java 14+)
用箭头(->)替代冒号,自动终止分支,无需break;支持返回值,整体可赋值给变量:
- 每个分支右边可以是表达式、代码块或throw语句
- 使用yield从代码块中显式返回值(不能用return)
- 必须覆盖所有可能取值(或有default),否则编译报错
- 示例:String result = switch (day) { case "Mon" -> "工作日"; case "Sat", "Sun" -> "周末"; default -> "未知"; };
常见易错点与注意事项
- String比较区分大小写,且null传入会抛NullPointerException(需提前判空)
- 枚举类型直接写枚举常量名,不加类名前缀(如case RED: ✅,不是case Color.RED: ❌)
- switch表达式中若某分支是代码块,必须用yield返回,且所有分支返回类型要一致
- 老版本Java(
掌握两种写法,按项目JDK版本选择即可。新项目优先用switch表达式,逻辑更安全、简洁。
立即学习“Java免费学习笔记(深入)”;









