不带break导致case穿透

case语句中要带break,不然switch找到了对应的case入口,后面的case(包括default)都被忽略,全部执行,直到switch结束

案例1:有符合的case,符合的case无break,default在符合的case后面

源代码:

public class DefaultDemo {
    public static void main(String [] args){
        int x = 2, y = 0 ;
        switch(x){
            case 1:
                y+=1;
                break;
            case 4:
                y+=5000;
                break;
            case 2://这里没有break
                y+=20;

            case 3:
                y+=300;
                break;
            default:
                y+=4000;
        }
        System.out.println("y="+y);
    }
}

输出:y=320

分析:到case 2的时候,开始执行了y=y+20=0+20=20,然后继续执行y=y+300=20+300=320


案例2:有符合的case,符合的case无break,default在符合的case前面

源代码:


public class DefaultDemo {
    public static void main(String [] args){
        int x = 2, y = 0 ;
        switch(x){
            case 1:
                y+=1;
                break;
            case 4:
                y+=5000;
                break;
            default://default在符合条件的case 2前面
                y+=4000;
            case 2://这里没有break
                y+=20;

            case 3:
                y+=300;
                break;
        }
        System.out.println("y="+y);
    }
}

输出:y=320

分析:有符合的case,所以就算default在前面也没用,从case 2开始执行,又因为case 2没有break,所以也执行了case 3


案例2:无符合的case,符合的case无break,default在符合的case后面

源代码:

public class DefaultDemo {
    public static void main(String [] args){
        int x = 6, y = 0 ;
        switch(x){
            case 1:
                y+=1;
                break;
            case 4:
                y+=5000;
                break;
            default://default在符合条件的case 2前面
                y+=4000;
            case 2:
                y+=20;

            case 3:
                y+=300;
                break;
        }
        System.out.println("y="+y);
    }
}

输出:y=4320

分析:无符合的case,从default开始执行,又因为default里没有break,同样发生穿透,一直到break/结束

猜你喜欢

转载自blog.csdn.net/xiang0731/article/details/88976866