Java多分支选择主要用switch语句实现,支持byte、short、int、char、String(JDK7+)、enum(JDK5+)等类型,需注意break防穿透、String非空、枚举安全及Java14+的switch表达式新特性。

Java 中的多分支选择主要通过 switch 语句实现,它比多个 if-else if 更简洁、可读性更好,也更适合处理“单一表达式匹配多个固定值”的场景。
switch 的基本语法结构
switch 语句根据一个表达式的值,跳转到匹配的 case 分支执行。注意:表达式结果类型必须是 byte、short、int、char、String(JDK 7+)、enum(JDK 5+)或其包装类(如 Integer、Character、String 等),不支持 long、double、float 或普通对象。
基本写法如下:
switch (表达式) {
case 值1:
// 执行语句1
break;
case 值2:
// 执行语句2
break;
default:
// 无匹配时执行(可选)
}
关键细节:break 和 fall-through
每个 case 后如果没有 break,程序会继续执行下一个 case 的代码(称为“穿透”或 fall-through),这常被误用,也可能被有意利用。
立即学习“Java免费学习笔记(深入)”;
- 忘记
break是常见 bug 来源,容易导致多个分支逻辑被意外执行 - 若需多个值走同一段逻辑,可把几个
case连写,不加break直到末尾 -
default不强制放在最后,但习惯放末尾;它没有隐式break,后面若有其他case仍会穿透(不过一般不会这么写)
使用 String 和枚举的注意事项
JDK 7 开始支持 String 类型的 switch,内部其实是调用 String.hashCode() + equals() 实现的,所以要求字符串非 null,否则运行时报 NullPointerException。
枚举类型天然适合 switch,写法清晰安全:
enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
Day today = Day.WED;
switch (today) {
case MON:
case TUE:
case WED:
System.out.println("工作日");
break;
case SAT:
case SUN:
System.out.println("周末");
break;
}
替代方案与现代建议
Java 14+ 引入了 switch 表达式(带箭头 -> 和 yield),支持返回值、自动终止、无穿透,更安全简洁:
int num = switch (day) {
case "MON", "TUE", "WED" -> 1;
case "THU", "FRI" -> 2;
default -> 0;
};
- 箭头分支不穿透,无需
break - 所有可能路径必须覆盖(或有
default),编译器强制检查 - 适合用于赋值或返回结果的场景,语义更明确


















