java switch语句支持case匹配与break防穿透,java 14+引入箭头语法自动终止穿透、支持多值合并和返回值;需注意case值为编译期常量、字符串大小写敏感及null安全(14+已修复),区间判断等场景应改用if-else。

Java 中的 switch 语句通过 case 标签匹配值,并用 break 防止穿透,从而清晰处理多个分支选项。
基本结构与多分支写法
每个 case 后跟一个常量值(从 Java 14 起支持字符串、枚举、基本类型及包装类),多个 case 可共用一段逻辑(即“穿透”),但通常需显式 break 终止当前分支:
-
case 1:→ 执行对应代码块,遇到break就跳出整个switch - 若漏写
break,程序会继续执行下一个case的语句(称为“fall-through”) -
default:是可选的兜底分支,建议放在最后,不强制要求有break(但加上更安全)
Java 14+ 新写法:箭头语法(推荐)
使用 -> 替代冒号,自动终止穿透,更简洁安全:
- 每个
case后直接写表达式或语句块,无需break - 支持多值合并:
case 1, 2, 3 -> System.out.println("小数字"); - 可返回值:
int result = switch (x) { case 1 -> 10; case 2 -> 20; default -> 0; };
常见易错点提醒
实际编码中要注意几个细节:
-
case值必须是编译期常量,不能是变量或方法调用 - 字符串比较区分大小写,且 null 传入会抛
NullPointerException(Java 14+ 已修复 null 安全问题) - 老版本(Java 7 之前)不支持字符串,只能用
if-else替代 - 如果所有
case都没匹配又没写default,则什么也不执行
什么时候该换用 if-else?
不是所有多分支都适合 switch:
- 条件是区间判断(如
x > 10 && x )→ 用 <code>if-else - 分支逻辑非常复杂,每条路径要初始化不同对象 →
if-else更易读 - 运行时才确定的值(比如用户输入解析后动态计算的码值)→
switch不适用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











