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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郝九凤 中级黑马   /  2014-7-19 13:56  /  8321 人查看  /  32 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       
        int num = 4;
        int y = 0;
        switch(num) {
                case 1:
                        y++;
                case 2:
                        y+=2;       
                case 3:
                        y+=3;
                case 4:
                        y+=4;
                case 5:
                        y+=5;
        }
        System.out.println(y);
请问case5会执行吗?结果怎么会是9呢?

32 个回复

正序浏览
当case满足条件是,如果此时这个case中有break语句,就会执行完这个语句然后跳出switch
                               如果此时这个case中没有break语句,就会执行从这个语句到下面的语句,直到遇到break,或者执行到最后的语句为止。
回复 使用道具 举报
没有 break 就会顺序往下执行,首先找到执行的入口, 再顺序执行到程序的末尾。
回复 使用道具 举报
执行到符合条件后会一直执行到结束
回复 使用道具 举报
没有break的话 switch直接跳转到case num的语句进行执行 然后接着执行后面语句 若没有case num则直接退出
回复 使用道具 举报
学习中。。。。。。。。。
回复 使用道具 举报
如果不写break的话,程序会一直从case5走到最后才停止的,所以结果会是9
回复 使用道具 举报
我很想知道这个贴,管理看到会不会加技术分
回复 使用道具 举报
没有break会一直从匹配的case执行一直到switch结束
回复 使用道具 举报
它会从case1执行到case5 一直执行;
回复 使用道具 举报
首先switch是个选择语句,进入switch语句后,就会根据表达式的值去找对应的case值,你的初始值是4就去找case4了 ,没有break就会继续向下执行到case5,y+=4 就是y=y+4,y因为y初始值s是0,所以到case5时y=4,所以结果就会是9了!!!
回复 使用道具 举报
case4和case5执行,结果应该会是9
回复 使用道具 举报
没有break当然会一直向下走啊,底下的判断也不用做了,直到遇见大括号或者其他结束语句,所以执行了 case 4:   y+=4; case 5:   y+=5;经过两次加的操作输出9
回复 使用道具 举报
没有break,就一直执行下去,就是9.:lol
回复 使用道具 举报
楼主所谓的break的问题,就跟default位置不放在最后是同一个思想。这里说说default和break的一些知识点吧。
  1. 1、default语句是switch语句判断完case语句后不满足条件才执行的,所以无论default放在什么位置,switch最后才执行default;
  2. 2、switch语句是自然顺序从小到大执行case语句的;switch(int num)中的参数满足case num,就只执行case语句,都不满足就执行default语句;
  3. 3、一般情况下,我们都习惯把default放在最后,但是如果default不在最后而是放在case语句中间或者句首的位置,是否有区别呢?这个需要看default语句末尾处是否加了break。加了,执行default语句的时候,遇到break会正常跳出switch;如果没有加,执行完default语句后会继续执行它下面的case语句直到遇到break或者 “}”结束。
  4. 4、所以,在用switch语句时,最好的办法就是每一句case和default语句后面都加上break。
  5. 5、break就像一个终止符,不加程序就会继续执行,知道遇见终止符才停止。
复制代码

所以,楼主的答案为9,并不奇怪!
回复 使用道具 举报
一直往下执行执行执行,执行到程序结束,,, 这问题不应该还问的吧
回复 使用道具 举报
一般需要在每个case后面都加break,防止出现case穿透现象。此代码的num = 4,那么程序会找到case 4:,依次向下执行,直到找到一个case里面有break的结束执行。中间case语句中的代码依次穿透,都会执行。在有些事务处理场景,我们还可以利用这种穿透现象,给一个相同情况的处理分组。供参考吧。
回复 使用道具 举报
Whero 中级黑马 2014-7-21 09:07:18
17#
从都执行到尾
回复 使用道具 举报
学习学习
回复 使用道具 举报
就不会停!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马