一、传统 switch(表达式) 执行步骤

switch(表达式){
    case 常量1:
        代码1;
        break;
    case 常量2:
        代码2;
    default:
        默认代码;
}

执行顺序分6步:

  1. 计算括号内表达式的值
    先算出 switch() 里的结果(int/char/String/枚举等)。
  2. 从上到下依次匹配 case 常量
    拿表达式结果和每个 case 后的常量做等值对比:
    • 找到相等的case,进入该分支执行代码;
    • 全部case都不匹配,直接跳到 default
  3. 执行当前case里的代码
  4. 分两种情况:
    • 分支末尾有 break:直接跳出整个switch,switch结束;
    • 没有 break(case穿透):不会退出,继续往下执行下一个case的代码,不再做匹配判断,直到遇见break或全部执行完。
  5. 若中途没break,持续穿透执行后续所有case代码。
  6. 全部执行完毕,跳出switch,运行后面代码。

案例演示case穿透流程

int num = 1;
switch(num){
    case 1:
        System.out.println("1");
    case 2:
        System.out.println("2");
        break;
    case 3:
        System.out.println("3");
}

流程:

  1. 计算num=1
  2. 匹配case 1,进入分支打印1
  3. 无break,穿透,不匹配直接进case2
  4. 打印2,遇到break,结束switch
    输出:
1
2

无匹配、走default流程

int num = 9;
switch(num){
    case 1: System.out.println("一");break;
    case 2: System.out.println("二");break;
    default: System.out.println("无效数字");
}
  1. num=9
  2. case1、case2都不匹配
  3. 进入default执行打印
  4. 分支结束,switch退出

二、Java14+ 箭头 switch -> 执行流程(无穿透)

语法:

switch(){
    case 1,2 -> System.out.println("一二");
    case 3 -> System.out.println("三");
    default -> System.out.println("其他");
}

执行流程:

  1. 计算switch表达式值;
  2. 自上而下匹配case常量;
  3. 匹配成功,执行 -> 后面代码块;
  4. 自动终止,不会穿透下一个case,不用写break
  5. 全部不匹配执行default;
  6. 直接退出switch。

三、switch表达式(带yield返回值)流程

int score = 85;
String grade = switch(score/10){
    case 9,10 -> "优秀";
    case 8 -> "良好";
    default -> "不及格";
};
  1. 计算表达式 score/10 = 8
  2. 匹配case 8;
  3. 执行分支,yield/直接写值 返回结果;
  4. 将返回值赋给变量grade;
  5. switch结束。

多行分支必须用 {} + yield:

String s = switch(n){
    case 1 -> {
        System.out.println("匹配1");
        yield "一号";
    }
    default -> "未知";
};

执行到yield就代表当前分支结束,返回值,跳出switch。

四、总结核心流程口诀

  1. 先算switch括号值;
  2. 从上往下挨个匹配case;
  3. 匹配到就执行分支代码;
  4. 传统switch遇break才退出,无break会穿透;
  5. 箭头switch自动阻断穿透;
  6. 全都不匹配执行default;
  7. 结束后执行switch外部代码。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐