java switch-case适合多固定值分支判断,比if-else更简洁高效;支持byte/short/int/char/string/enum及其包装类;jdk14+引入带返回值的表达式语法,避免fall-through。

Java 中 switch-case 语句适合处理多个固定值的分支判断,比 if-else 更简洁、可读性更好,且在编译期可能优化为跳转表,性能更优。
基本语法与使用要点
switch 后面必须是能求值为 byte、short、int、char、String(JDK 7+)、enum(JDK 5+)或其包装类(如 Integer、Character)的表达式。case 后跟常量值,不能是变量或表达式。
- 每个 case 分支后通常加 break,防止“穿透”(fall-through)到下一个 case
- default 分支可选,放在任意位置,但习惯放最后;不加 break 也会继续执行后续语句
- case 值必须唯一,重复会编译报错
字符串和枚举的 switch 写法
JDK 7 开始支持 String 类型,JVM 会自动调用字符串的 hashCode 和 equals 判断;枚举类型直接用枚举常量名即可,无需 .name() 或 .toString()。
- 字符串示例:
switch (status) { case "ACTIVE": ... break; case "INACTIVE": ... break; } - 枚举示例:
enum Level { LOW, MEDIUM, HIGH }; switch (level) { case LOW: ... break; } - 注意:String 为 null 时会抛出 NullPointerException,需提前判空
Java 14+ 的新写法:switch 表达式
支持返回值、箭头语法(->)和多语句用大括号 + yield,避免 break 和 fall-through 问题,更安全简洁。
- 单表达式写法:
int num = switch (day) { case "Mon" -> 1; case "Tue" -> 2; default -> 0; }; - 多语句块写法:
case "Sat", "Sun" -> { System.out.println("Weekend"); yield 6; } - 必须覆盖所有可能路径(或有 default),否则编译失败
常见陷阱与建议
老式 switch 容易因漏写 break 导致逻辑错误;新式 switch 表达式强制穷尽匹配,更适合现代代码风格。
- 不要在 case 中定义同名局部变量(除非用大括号包住作用域)
- 浮点数、long、boolean、数组、普通对象不能用于 switch
- 大量离散整数值(如 1~100 中的几个)仍可用 switch;范围判断(如 x > 10)请用 if
- IDE 通常能提示 missing break 或 unreachable code,善用检查
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











