public class SwitchTest2{
public static void main(String[] args){
int m=5;
switch(m){
case 1:
System.out.println("111111");
//break;
case 2:
System.out.println("2222222");
//break;
case 3:
System.out.println("3333333");
break;
case 4:
System.out.println("44444444");
break;
default:
System.out.println("ddddddddd");
//break;
}
}
}
****************************************************************************************************************
public class SwitchTest3{
public static void main(String[] args){
int m=5;
switch(m){
default:
System.out.println("ddddddddd");
//break;
case 1:
System.out.println("111111");
//break;
case 2:
System.out.println("2222222");
//break;
case 3:
System.out.println("3333333");
break;
case 4:
System.out.println("44444444");
break;
}
}
}
SwitchTest2和SwitchTest3的执行结果各是什么?为什么是这种情况?
switch语句的执行流程:进入switch语句后,就会根据表达式的值去找对应的case值。
如果最终没有找到,就执行default的内容。
switch语句的结束:就是遇到break或者执行到程序的末尾
public class SwitchTest2{
public static void main(String[] args){
int m=5;
switch(m){
case 1:
System.out.println("111111");
//break;
case 2:
System.out.println("2222222");
//break;
case 3:
System.out.println("3333333");
break;
case 4:
System.out.println("44444444");
break;
default:
System.out.println("ddddddddd");
//break;
}
}
}
本例中,变量值是5,case里面没有匹配到,就走default。
虽然没有break,但走到了程序结尾,所以程序结束了。输出结果是:ddddddddd
****************************************************************************************************************
public class SwitchTest3{
public static void main(String[] args){
int m=5;
switch(m){
default:
System.out.println("ddddddddd");
//break;
case 1:
System.out.println("111111");
//break;
case 2:
System.out.println("2222222");
//break;
case 3:
System.out.println("3333333");
break;
case 4:
System.out.println("44444444");
break;
}
}
}
本例中,先匹配case的值,没有对应的值,就走default,输出ddddddddd。
因为default没有在switch语句结尾,也没有break,就出现了“case穿透”,
走完default之后,就不再考虑case的值是否匹配,直接从上到下执行,
直至遇到break或者走到结尾。本例中在case 3 遇到break结束。
最终的结果是:
ddddddddd
111111
2222222
3333333