黑马程序员技术交流社区

标题: 第一次发提问帖,请大家帮忙解答关于switch [打印本页]

作者: Dr.Sparta    时间: 2014-10-25 17:19
标题: 第一次发提问帖,请大家帮忙解答关于switch
本帖最后由 Dr.Sparta 于 2014-11-1 18:23 编辑

请问switch语句中default的break是否可以省略?
例如
  1.         switch(a){
  2.                         case 1:
  3.                                 
  4.                         case 2:
  5.                                 
  6.                         case 3:
  7.                                 System.out.println(a+"有计入");
  8.                                 break;
  9.                                 
  10.                         default:
  11.                                 System.out.println(a+"无信息");
  12.                                 break;
  13.                         
  14.                 }
复制代码
运行时发现default的break有无都可以运行,是否可以省略呢?
第一次发提问有点小激动呢:)

作者: 坏人卡    时间: 2014-10-25 17:29
Default的含义是“其余情况”
如果不属于case 1、2、3的话就会执行Default后面的代码。
如果你把所有的情况都考虑到了,比如除了1、2、3以外不可能出现其他情况了,那么Default就可以省略了。
作者: wzg1015    时间: 2014-10-25 17:54
流程就是
首先查找是否有与其相等的,有则跳该标签,没有直接跳default:编译器应该会添加默认的default;
但是当他转到一个标签的时候就会将下面的语句一直执行,无视case,直到遇到break才跳出;
所以如果你default 放其他标签前面,就必须加break;
放最后的话可以不加,因为到最后就直接跳出代码块了
作者: 田峻菘    时间: 2014-10-25 21:43
default如果放在最后就不用写break,单如果放在前面或中间就需要写break,防止穿透。给你个题思考吧:下面程序执行的结果是?(D)
int x=2,y=3;
switch(x)
{
        default:
        y++;
        case 3:
        y++;
        case 4:
        y++;

}
Sysetem.out.println("y="+y);
A.  3
B.  4
C.  5
D.  6
这就是不写break发生了穿透
作者: 千里马    时间: 2014-10-26 00:17
为了防止意外的程序异常,还是按照规范写比较好,这个也不是什么难记的语法
作者: 踏云    时间: 2014-10-26 00:19
好吧,这么多大神了,我就只来混混脸熟算了
作者: cxdzh    时间: 2014-10-26 00:24
本帖最后由 cxdzh 于 2014-10-26 00:27 编辑

当有一个case符合判断之后,或者都不符合,运行default中的代码时,将会一直往下执行,直到遇到break.
例如
int x=4;
switch(x){default:
       System.out.print("3");      
case 1:
       System.out.print("1");
case 2:
       System.out.print("2");
      break;
}
打印结果会是312.


作者: 郭.威    时间: 2014-10-26 22:00
加油吧,好好看,一般这个语句也不怎么用,但也要记住,if语句必须熟练
作者: javaAndroid    时间: 2014-10-26 22:59
break最好写上 ,除非是特定情况不需要break
如果一个case语句没有break的话,那么代码执行完这一条case语句
会继续向下执行下一条case语句,即使条件不满足
一直遇到break位置才会结束
至于default,那是表示默认的情况,
如果你可以保证你考虑的条件或者情况很完全可以不写。
作者: java_student    时间: 2014-10-28 12:06
在中间的都不以省略,符合条件啦,就要退出这段代码的执行。break;就是用于退出,不写的话,虽然已经找到满中条件的。但还继续向下判断
作者: java_student    时间: 2014-10-28 12:08
      在中间的都不可以省略,符合条件啦,就要退出这段代码的执行。break;就是用于退出,不写的话,虽然已经找到满中条件的。但还继续向下判断。
作者: dong53821713    时间: 2014-10-28 16:59
放到最后的话加不加都可以,如果放在case之前的话 加和不加 break运行结果就会不一样了
作者: OnlyStyle    时间: 2014-10-28 23:38
case只是让程序找到入口,一进去没遇到break的话就一直跑,你说break能省么?至于default是可以省的。
作者: 燃烧    时间: 2015-5-10 22:51
最好写上,这样保险一点,不然出现bug很难找的




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