为何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
相关产品推荐
相关产品推荐

