switch语句概述
switch语句用于多分支选择,根据表达式的值选择执行不同的代码块。
基本语法
switch(表达式) {
case 值1:
// 执行代码
break;
case 值2:
// 执行代码
break;
default:
// 默认执行代码
}
示例:星期几判断
int day = 3;
switch(day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("其他");
}
case穿透
当case后没有break语句时,会继续执行下一个case(穿透),可以利用这一点:
int score = 85;
switch(score / 10) {
case 10:
case 9:
System.out.println("优秀");
break;
case 8:
case 7:
System.out.println("良好");
break;
case 6:
System.out.println("及格");
break;
default:
System.out.println("不及格");
}
switch表达式(Java 14+)
Java 14引入新的switch表达式,使用箭头函数和yield返回值:
// Java 14+ switch表达式
String result = switch(day) {
case 1 -> "星期一";
case 2 -> "星期二";
case 3 -> "星期三";
default -> "其他";
};
// 使用yield返回值
int days = switch(month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 4, 6, 9, 11 -> 30;
case 2 -> 28;
default -> 0;
};
多值匹配(Java 21+)
Java 21支持在一个case中匹配多个值:
String dayType = switch(day) {
case 1, 2, 3, 4, 5 -> "工作日";
case 6, 7 -> "周末";
default -> "无效";
};
switch vs if-else
| 特性 | switch | if-else |
|---|---|---|
| 适用场景 | 离散值判断 | 范围判断 |
| 判断类型 | byte/short/int/char/String/enum | 任意boolean条件 |
| 可读性 | 多分支时更清晰 | 条件复杂时更灵活 |
小结
- switch根据表达式的值选择执行对应的case
- 每个case后需要
break防止穿透(除非故意利用穿透) default处理所有case都不匹配的情况- Java 14+支持箭头语法switch表达式
- Java 21+支持多值匹配:
case 1, 2, 3 ->