黑马程序员技术交流社区
标题: switch语句细节 [打印本页]
作者: 18343105017 时间: 2016-6-21 23:17
标题: switch语句细节
本帖最后由 18343105017 于 2016-6-23 22:06 编辑
细节:1):break是可以省略的,如果省略了就一直执行到遇到break为止;
2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;
3):default可以写在switch结构中的任意位置;
1.case default的匹配工作只做一次 2.一旦进入代码区,就是从头执行到尾直到遇到break
例1:
int a=1;
switch (a) {
default:
printf("exe default\n");
case 1:
printf("exe case 1\n");
case 2:
printf("exe case 2\n");
}
结果:
exe case 1
exe case 2
如果匹配不到case 就走default进入代码区,代码区是啥?就是除了前面case default剩下的部分
int a=1;
switch (a) {
default:
printf("exe default\n");
case 2:
printf("exe case 2\n");
case 3:
printf("exe case 3\n");
}
这里没有匹配到case就从default进入代码区,代码区就是
printf("exe default\n");
printf("exe case 2\n");
printf("exe case 3\n");
所以结果就是
exe default
exe case 2
exe case 3
你这样放
case 2:
printf("exe case 2\n");
default:
printf("exe default\n");
case 3:
printf("exe case 3\n");
没有匹配到case从default进入代码区
结果就是
exe default
exe case 3
这就是switch本来应该执行的顺序,每个case后面的代码本来都是连在一起的,代码部分就是一个整体,从头执行到尾
可是代码区里面插入了break,打破规则,让每个case独立感觉像是一个分支,执行完就结束
printf("exe case 2\n");
break;
printf("exe default\n");
break;
printf("exe case 3\n");
break;
有了break的代码区变成了一段一段的,从而产生错觉,感觉像是分支,还纠结究竟执行哪个,其实没有break捣蛋,只要进入代码区,管它啥从头执行到尾
作者: L1ub0w3n 时间: 2016-6-22 22:44
很好!温故知新!
作者: 18343105017 时间: 2016-6-22 23:00
这都是从复习笔记中摘过来的
作者: Kingchen 时间: 2016-6-22 23:02
顶一个!
作者: 18343105017 时间: 2016-6-22 23:06
感谢,感谢
作者: 天之骄子no1 时间: 2016-6-23 20:09
楼主第二句话有点问题 switch 后面的小括号中的变量类型,除了byte,char,short,int四种类型外,String 和枚举类型也都可以的
作者: 940752944 时间: 2016-6-23 20:51
好像是先匹配case后面的值,如果没有你相同的就执行default,如果把default放前面不一定先执行default
比如这个例子int x=2,y=3;
switch(x)
{
default:
y++;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
作者: 18343105017 时间: 2016-6-23 21:54
恩 1.5版本后枚举可以 1.7版本后String可以
作者: 18343105017 时间: 2016-6-23 22:04
恩 我复制粘贴的时候还真没注意到 谢谢指出
作者: oxiwangz 时间: 2016-6-30 20:00
不错!温故知新。
作者: oxiwangz 时间: 2016-6-30 20:27
很不错,温故知新,赞一个
作者: 他的好 时间: 2016-6-30 20:36
有点问题
细节:1):break是可以省略的,如果省略了就一直执行到程序末尾结束,如果省略掉break会有出现case穿透现象,有时候写程序会用到case穿透
2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;jdk1.5以后可以是枚举,jdk1.7以后可以是字符串(String)
3):default可以写在switch结构中的任意位置;不管default在什么位置,都是先匹配case的值
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |