一、作用
多分支判断,适合固定等值匹配 场景,替代多层 if-else if,代码更整洁。
支持两种形式:传统switch、Java14+ 增强switch(带箭头、yield返回值)。
二、传统 switch 语法
java
switch(表达式){
case 常量1:
执行代码;
break;
case 常量2:
执行代码;
break;
...
default:
都不匹配时执行;
}
规则
- switch表达式支持类型:
byte、short、int、char、枚举、String(JDK7起支持字符串);
不支持:long、float、double、布尔。 case后面必须是常量,不能写变量、区间;break:跳出switch,不加会发生穿透,继续执行下一个case;default:可选,所有case都不匹配时执行,位置随意,建议放最后。
示例1:数字判断
java
int week = 3;
switch(week){
case 1:
System.out.println("周一");
break;
case 2:
System.out.println("周二");
break;
case 3:
System.out.println("周三");
break;
default:
System.out.println("休息日");
}
输出:周三
示例2:case穿透(利用穿透合并相同逻辑)
需求:1、2、3、4、5输出工作日,6、7输出周末
java
int day = 6;
switch(day){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("周末");
break;
}
三、Java14+ 增强switch(箭头语法,无穿透)
语法特点
- 使用
->,自动阻断穿透,不用写break; - 多常量逗号分隔写在同一个case;
- 可以作为表达式,用
yield返回结果。
写法1:基础箭头switch
java
int week = 2;
switch (week) {
case 1,2,3,4,5 -> System.out.println("上班");
case 6,7 -> System.out.println("放假");
default -> System.out.println("无效");
}
写法2:switch表达式(yield返回值)
可以把匹配结果赋值给变量
java
int score = 85;
String level = switch (score / 10) {
case 9,10 -> "优秀";
case 8 -> "良好";
case 6,7 -> "及格";
default -> "不及格";
};
System.out.println(level); // 良好
如果分支有多行代码,需要加大括号+yield:
java
String res = switch (num) {
case 1 -> {
System.out.println("一号");
yield "one";
}
default -> "other";
};
四、switch vs if
- switch:只能等值匹配,适合固定有限选项(星期、月份、状态码);
- if:支持区间、复杂逻辑判断(大于、小于、多条件&&||),适用范围更广。
五、常见易错点
- 忘记写break造成穿透;
- case后写变量、区间,编译报错;
- switch传入float/double/long,语法不支持;
- String匹配区分大小写;
- switch表达式必须覆盖所有情况,无default会报错。