Java switch 语句

一、作用

多分支判断,适合固定等值匹配 场景,替代多层 if-else if,代码更整洁。

支持两种形式:传统switch、Java14+ 增强switch(带箭头、yield返回值)。

二、传统 switch 语法

java 复制代码
switch(表达式){
    case 常量1:
        执行代码;
        break;
    case 常量2:
        执行代码;
        break;
    ...
    default:
        都不匹配时执行;
}

规则

  1. switch表达式支持类型:byte、short、int、char、枚举、String(JDK7起支持字符串);
    不支持:long、float、double、布尔。
  2. case 后面必须是常量,不能写变量、区间;
  3. break:跳出switch,不加会发生穿透,继续执行下一个case;
  4. 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(箭头语法,无穿透)

语法特点

  1. 使用 ->,自动阻断穿透,不用写break;
  2. 多常量逗号分隔写在同一个case;
  3. 可以作为表达式,用 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

  1. switch:只能等值匹配,适合固定有限选项(星期、月份、状态码);
  2. if:支持区间、复杂逻辑判断(大于、小于、多条件&&||),适用范围更广。

五、常见易错点

  1. 忘记写break造成穿透;
  2. case后写变量、区间,编译报错;
  3. switch传入float/double/long,语法不支持;
  4. String匹配区分大小写;
  5. switch表达式必须覆盖所有情况,无default会报错。