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/结束