本文目录导读:

是的,Java 的 switch 表达式(Java 14 正式引入,之前作为预览特性)相比传统的 switch 语句确实更加简洁、安全和灵活。
核心变化在于它从“语句”变成了“表达式”,可以返回值,并引入了->语法和 yield 关键字。
下面通过对比来具体看看。
传统 switch 语句(旧式,繁琐且易错)
传统的 switch 是语句,需要手动 return 或 break,容易遗漏 break 导致“穿透”,且不能直接赋值。
// 传统 switch 语句
public static String getDayTypeOld(int day) {
String type;
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
type = "工作日";
break; // 容易忘记
case 6:
case 7:
type = "周末";
break;
default:
type = "未知";
// 也有可能遗漏 break,不过这里是最后了
}
return type; // 需要额外变量存储
}
// 调用
String result = getDayTypeOld(3); // "工作日"
问题:
- 代码冗长,需要额外的变量
type和break语句。 - 忘记写
break会导致逻辑错误(穿透)。 - 无法直接作为表达式赋值给变量。
新式 switch 表达式(简洁、安全)
Java 14 及以后,switch 可以作为表达式使用,直接返回值,箭头语法 -> 更清晰,并且自动避免了穿透。
// 新式 switch 表达式(使用 -> 箭头语法)
public static String getDayTypeNew(int day) {
return switch (day) {
case 1, 2, 3, 4, 5 -> "工作日"; // 多个 case 合并
case 6, 7 -> "周末";
default -> "未知";
};
}
// 调用(可以直接赋值,甚至不用方法)
String result = switch (day) {
case 1, 2, 3, 4, 5 -> "工作日";
case 6, 7 -> "周末";
default -> "未知";
};
优点:
- 直接赋值:
switch本身就是一个表达式,直接返回结果给变量result。 - 箭头语法(
->): 简洁,且不会发生穿透,每个分支自动结束。 - 多个case合并: 用逗号分隔,
case 1, 2, 3非常直观。 - 不需要
break: 减少了错误的来源。
更复杂的场景:使用 yield 关键字
当 switch 的某个分支需要多行代码或计算后才能返回值时,可以使用 yield 关键字。
String result2 = switch (score) {
case 90, 100 -> "优秀";
case 80 -> {
// 多行代码处理
System.out.println("良好,但还有进步空间");
yield "良好"; // 返回结果
}
case 70 -> "中等";
default -> {
System.out.println("需要加油");
yield "不及格";
}
};
yield 的作用:
- 在
switch表达式的代码块()中,用yield返回一个值。 - 它取代了传统
switch中的return,但仅在switch表达式内部有效,不会退出整个方法。
新式 switch 表达式为什么更简洁?
| 特性 | 传统 switch 语句 |
新式 switch 表达式 |
|---|---|---|
| 本质 | 语句(无返回值) | 表达式(有返回值) |
| 语法 | case X: 冒号 |
case X -> 箭头 或 case X: 冒号 |
| 返回值 | 需要手动赋值和 return |
switch(...) 直接返回结果 |
| 穿透 | 默认发生,需要 break 控制 |
箭头语法 -> 自动避免穿透 |
| 多值匹配 | 逐个写 case X: |
case 1, 2, 3 -> 一行搞定 |
| 代码块 | 直接写代码 | 需要 并用 yield 返回值 |
新式 switch 表达式非常明显地更简洁、更安全、更具表达力,它让代码减少了约30%-50%的样板代码(如 break、临时变量、重复的 case),同时消除了常见的 break 遗漏导致的bug。switch 在Java中成为一个现代化的、值得信赖的控制流工具。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播