You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java switch语句执行疑问:匹配'A'为何会执行'Y'分支?

Switch语句执行逻辑解析

问题代码

public class Demo {
    public static void main(String args[]) {
        char c = 'A' ;
        int num = 10 ;

        switch(c) {
            case 'B' :
                num++ ;
            case 'A' :
                num++ ;
            case 'Y' :
                num++ ;
                break ;
            default :
                num-- ;
        }

        System.out.println(num);
    }
}

疑问

我原本认为程序只会进入case 'A'分支,num的值会变为11。但在IDEA中运行后,发现程序执行了case 'A'和case 'Y'分支(对此感到疑惑),最终num的值为12。

我执行了代码System.out.println('A' == 'Y');,返回结果为false,想了解该现象的原因。

原因解析

核心是switch语句的“贯穿执行”特性:当某个case分支匹配成功后,如果该分支末尾没有break关键字,程序不会跳出switch结构,会依次执行后续所有case(包括default)的代码,直到遇到break或者switch结构结束。

具体到你的代码执行流程:

  1. 变量c='A',匹配到case 'A'分支,执行num++,此时num从10变为11;
  2. 由于case 'A'分支没有break,程序不会停止,继续执行下一个case 'Y'的代码,再次执行num++,num变为12;
  3. case 'Y'分支末尾有break,程序跳出switch结构,最终输出12。

你测试'A' == 'Y'返回false是正确的,这说明两个字符本身不相等,但这和switch的执行逻辑无关——switch是匹配到对应case后开始执行,没有break就会持续向下执行后续分支,并非只执行匹配的单个case。

修正方案

如果希望程序仅执行case 'A'分支,只需在该分支末尾添加break关键字,修改后代码如下:

public class Demo {
    public static void main(String args[]) {
        char c = 'A' ;
        int num = 10 ;

        switch(c) {
            case 'B' :
                num++ ;
                break;
            case 'A' :
                num++ ;
                break; // 添加break,执行完该分支即跳出switch
            case 'Y' :
                num++ ;
                break ;
            default :
                num-- ;
        }

        System.out.println(num); // 此时输出11
    }
}

内容的提问来源于stack exchange,提问作者Franz Kafka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 22:48:15