黑马程序员技术交流社区
标题:
它们的执行结果各是什么?为什么?
[打印本页]
作者:
范晓冲
时间:
2014-1-1 14:13
标题:
它们的执行结果各是什么?为什么?
本帖最后由 范晓冲 于 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的执行结果各是什么?为什么是这种情况?
作者:
陈善奔
时间:
2014-1-1 14:26
不一样的。。。
switch语句是顺序执行的,也就是说,m=5,是default,接下来就往下执行,直到碰到break,或语句完毕。
break就是跳出语句。
作者:
高正新
时间:
2014-1-2 21:37
这个我也没弄明白。
switch执行的规则是如果有一个条件满足了,那么接下来的那些条件就不判断了。一直往下执行。
当添加了break之后,代码执行就结束了。(这些说的不是很明白,相信你自己也清楚)
关键是当default写在前面的时候,似乎虚拟机已经知道了后面的条件都不适合,直接选择了default,然后就继续往下执行了。
又或者虚拟机不知道下面的条件有没有满足当前的判断,循环了一遍,最后还是选择了default,然后接着往下执行了。
但是,无论它是怎么判断的,但是规则始终是没有改变的。
就是当一个条件满足了之后,接下来的条件它就不判断了,直接执行,除非遇到break,才会跳出switch。记住这一点,我感觉就可以了,哈哈
作者:
浮出一个美
时间:
2014-1-2 22:22
一般的规则楼上已经说得很清楚了.
switch执行的规则是如果有一个条件满足了,那么接下来的那些条件就不判断了。一直往下执行。
当添加了break之后,代码执行就结束了。
我就说说我测试后的一个小结论吧:
switch还是会先判断是否满足每一个case,满足并且执行到break就退出。
如果没有满足,继续往下执行,最后执行default,但是default没有break,所以又继续往下执行每一个case,直到break,或则程序结束。
作者:
松子
时间:
2014-1-2 22:40
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
希望能帮到你!
作者:
猎鹰tianya
时间:
2014-1-3 21:50
我的想法和楼上是一样一样的,就不多说了{:soso_e112:}
作者:
杨丽静
时间:
2014-1-4 16:48
第一个是
ddddddddd
首先表达式的值与每个case语句中的常量作比较,结果没有一个是匹配的,后遇到default,执行default语句,程序结束
111111
2222222
3333333
这个跟上一个不同的是没有判断case的常量就遇到了default语句,先执行default语句,在执行default之后,后面的不予判断就开始执行,直到遇到break程序结束
第二个是
ddddddddd
111111
2222222
3333333
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2