黑马程序员技术交流社区

标题: switch语句没写break跳出循环会怎样? [打印本页]

作者: 郝九凤    时间: 2014-7-19 13:56
标题: switch语句没写break跳出循环会怎样?
       
        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呢?
作者: 李云贵    时间: 2014-7-19 14:03
case 4:
                        y+=4;
                case 5:
                        y+=5;
以上俩句代码得到执行。num=4,case 4匹配上,进入执行,一直到break跳出,没有break就一直往下执行。
所以答案为9
作者: Blake    时间: 2014-7-19 15:32
如果没有break;的话,会从对应的case开始执行,一直到最后。所以执行了 case 4:   y+=4; case 5:   y+=5;
作者: 阳光的嘉主角    时间: 2014-7-19 15:47
往下走呗
作者: 微笑女皇    时间: 2014-7-19 15:52
执行了case5
作者: 孤守星空    时间: 2014-7-19 16:12
```````这个技术分在问这个问题,得深究
作者: 签发    时间: 2014-7-19 16:16
没有break会从case4开始执行,case5也会执行。所以结果是9
作者: as_heima    时间: 2014-7-19 19:41
你的y初始值是0,然后开始匹配~走到case 4: 的时候执行了y+=4;~然后依次执行后面的所有语句,并且不判断case后面的值~所以就等于9了
作者: chulangren2    时间: 2014-7-19 21:10
没有break的话,程序会从找到的那个开始一直往下运行,如果都找不到就从default那开始从上往下运行,没有default,就从第一个一直往下运行,一直到找到break,或者读完。
作者: 新语新空    时间: 2014-7-19 21:22
如果不写break语句,会发生case穿透,代码中num的值为4,所以,switch语句会找到case4开始执行,y的值为0;如果case4 :y+=4;break;则输出y的值为4,当case4没有break语句就会接着执行case5,直到遇到break或者“}”结束switch语句。
作者: 想做开发    时间: 2014-7-19 21:26
孤守星空 发表于 2014-7-19 16:12
```````这个技术分在问这个问题,得深究

额 哈哈
作者: Adjin    时间: 2014-7-20 09:32
结束程序没有碰见break;它就一直走,直到出现}
作者: huanglyhf    时间: 2014-7-20 16:25
因为没有break 跳出,所以 执行完了+4,顺便把剩下的句子也执行了一遍。所以,后面的y+=5也执行了!
作者: Imp_x    时间: 2014-7-20 22:56
我能说楼猪水得一手好经验么:P
作者: 曾翀    时间: 2014-7-21 08:22
就不会停!
作者: 阿磊    时间: 2014-7-21 08:56
学习学习

作者: Whero    时间: 2014-7-21 09:07
从都执行到尾
作者: 刘卫强    时间: 2014-7-21 17:33
一般需要在每个case后面都加break,防止出现case穿透现象。此代码的num = 4,那么程序会找到case 4:,依次向下执行,直到找到一个case里面有break的结束执行。中间case语句中的代码依次穿透,都会执行。在有些事务处理场景,我们还可以利用这种穿透现象,给一个相同情况的处理分组。供参考吧。
作者: 高老强    时间: 2014-7-21 17:50
一直往下执行执行执行,执行到程序结束,,, 这问题不应该还问的吧
作者: ⋛⋌⋚JEEP    时间: 2014-7-21 17:53
楼主所谓的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,并不奇怪!
作者: HPU--spring87    时间: 2014-7-21 22:24
没有break,就一直执行下去,就是9.:lol
作者: chensuyu    时间: 2014-7-21 23:00
没有break当然会一直向下走啊,底下的判断也不用做了,直到遇见大括号或者其他结束语句,所以执行了 case 4:   y+=4; case 5:   y+=5;经过两次加的操作输出9
作者: rolling-stone    时间: 2014-7-21 23:05
case4和case5执行,结果应该会是9
作者: 付士长    时间: 2014-7-22 00:22
首先switch是个选择语句,进入switch语句后,就会根据表达式的值去找对应的case值,你的初始值是4就去找case4了 ,没有break就会继续向下执行到case5,y+=4 就是y=y+4,y因为y初始值s是0,所以到case5时y=4,所以结果就会是9了!!!
作者: 楚风★憧憬    时间: 2014-7-22 00:24
它会从case1执行到case5 一直执行;
作者: meibinlove    时间: 2014-7-22 08:17
没有break会一直从匹配的case执行一直到switch结束
作者: 陈新海1    时间: 2014-7-22 08:36
我很想知道这个贴,管理看到会不会加技术分
作者: 慕杰    时间: 2014-7-22 10:49
如果不写break的话,程序会一直从case5走到最后才停止的,所以结果会是9
作者: dreamseekerkun    时间: 2014-7-22 11:55
学习中。。。。。。。。。
作者: AEhaojiu    时间: 2014-7-22 11:58
没有break的话 switch直接跳转到case num的语句进行执行 然后接着执行后面语句 若没有case num则直接退出
作者: 波风梅西    时间: 2014-7-22 12:14
执行到符合条件后会一直执行到结束
作者: 爷丶 う    时间: 2014-7-22 12:47
没有 break 就会顺序往下执行,首先找到执行的入口, 再顺序执行到程序的末尾。
作者: dingpanbo    时间: 2014-7-22 13:01
当case满足条件是,如果此时这个case中有break语句,就会执行完这个语句然后跳出switch
                               如果此时这个case中没有break语句,就会执行从这个语句到下面的语句,直到遇到break,或者执行到最后的语句为止。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2