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

为何switch匹配case后无break会执行后续代码?非匹配case为何也执行?

Java Switch 语句常见疑问解答

先看你提供的代码:

class Switch{
    public static void main(String[] args){
        int x = 2;
        switch(x){
            case 1 : System.out.println("1");
            case 2  : System.out.println("2");
            case 3 : System.out.println("3");
            case 4 :System.out.println("4");
        }
    }
}

1. 为何switch语句中,匹配到对应case后若不使用break关键字,后续case中的语句会被执行?

这是Java switch的**“贯穿(fall-through)”特性**,属于语言设计时确定的逻辑。switch会先找到与变量匹配的case标签,将该位置作为执行起始点,之后会按顺序执行后续所有case里的代码,直到遇到break、return或者整个switch代码块结束。这种设计是为了方便多个case共享同一逻辑的场景——比如多个case需要执行相同代码时,只需要在最后一个case写逻辑,前面的case不写break即可,不用重复编写代码。

2. 上述代码中变量x的值为2,case 3和case 4并未匹配x的值,为何输出结果为2、3、4?

当x=2匹配到case 2后,因为没有break语句,触发了“贯穿”行为。程序执行完case 2的打印语句后,不会跳出switch,而是直接继续往下执行case 3、case 4里的代码,完全不再检查后续case的标签是否匹配x的值,直到switch块结束,所以会依次输出2、3、4。

3. 已知添加break后只会输出2,但为何必须在case 2后添加break,毕竟后续case并不匹配x的值?

switch的执行逻辑是找到匹配的case作为起始点后,就不再验证后续case的标签条件。不管后续case的标签和变量值是否匹配,只要没遇到break,就会按顺序执行里面的代码。所以必须在case 2后添加break,才能终止后续代码的执行,只输出2。


内容的提问来源于stack exchange,提问作者Rakesh Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:52:49