A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 范晓冲 中级黑马   /  2014-1-1 14:13  /  1909 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范晓冲 于 2014-1-1 14:59 编辑

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的执行结果各是什么?为什么是这种情况?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

6 个回复

倒序浏览
不一样的。。。
switch语句是顺序执行的,也就是说,m=5,是default,接下来就往下执行,直到碰到break,或语句完毕。
break就是跳出语句。
回复 使用道具 举报
一般的规则楼上已经说得很清楚了.
switch执行的规则是如果有一个条件满足了,那么接下来的那些条件就不判断了。一直往下执行。
当添加了break之后,代码执行就结束了。
我就说说我测试后的一个小结论吧:
switch还是会先判断是否满足每一个case,满足并且执行到break就退出。
如果没有满足,继续往下执行,最后执行default,但是default没有break,所以又继续往下执行每一个case,直到break,或则程序结束。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 神马都是浮云

查看全部评分

回复 使用道具 举报
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

希望能帮到你!

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
我的想法和楼上是一样一样的,就不多说了{:soso_e112:}
回复 使用道具 举报
第一个是
ddddddddd
首先表达式的值与每个case语句中的常量作比较,结果没有一个是匹配的,后遇到default,执行default语句,程序结束
111111
2222222
3333333
这个跟上一个不同的是没有判断case的常量就遇到了default语句,先执行default语句,在执行default之后,后面的不予判断就开始执行,直到遇到break程序结束



第二个是
ddddddddd
111111
2222222
3333333
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马