Java switch匹配核心是case必须为编译期常量,支持byte/short/char/int及其包装类、枚举、字符串(Java7+)、record(Java21+),严格值匹配且无范围语法,推荐用switch表达式(Java14+)避免穿透并提升安全性。

Java 中的 switch 语句用于多路分支,匹配固定选项的核心是:**每个 case 标签后必须是编译期确定的常量值**,且类型需与 switch 表达式兼容。
支持的匹配类型(Java 14+ 统一规则)
从 Java 14 起,switch 支持以下类型的表达式和 case 值:
-
基本类型:
byte、short、char、int -
包装类型:
Byte、Short、Character、Integer(自动拆箱为对应基本类型) -
枚举常量:如
Color.RED、Day.MONDAY -
字符串字面量:如
"start"、"stop"(自 Java 7 起支持) -
Java 21+ record 实例(需为常量,如
Point(0, 0))
case 必须是编译时常量
不能用变量、方法调用或运行时计算结果作为 case 值。例如以下写法非法:
int x = 5;
switch (n) {
case x: ... // 编译错误:x 不是常量
case getValue(): ... // 错误:方法调用非编译时常量
}
正确写法需显式声明为 final static 或直接使用字面量:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
-
final static int MAX = 10;→case MAX:✅ -
case 10:✅ -
case "hello":✅ -
case Color.BLUE:✅(前提是 Color 是枚举类)
匹配逻辑:严格相等,不支持范围或模式
switch 的 case 匹配是精确值匹配,不是“包含”或“前缀匹配”:
-
case "abc":只匹配字符串"abc",不匹配"abcd"或"ab" - 没有
case 1..5:这样的区间语法(Java 不支持,可用 if-else 替代) - 若需复杂匹配(如正则、条件判断),应改用
if-else if链
推荐写法:使用 switch 表达式(Java 14+)
更安全、更简洁,强制处理所有情况或添加 default:
String result = switch (status) {<br> case "OK" -> "Success";<br> case "ERR" -> "Failed";<br> case "WARN" -> "Warning";<br> default -> "Unknown";<br>};
优点:
- 无隐式穿透(无需
break) - 编译器检查是否覆盖所有可能值(对枚举尤其有用)
- 返回值可直接赋值,语义清晰
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










