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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任长存 中级黑马   /  2015-12-31 10:35  /  1120 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int x = 2,y=3;

switch(x)
{
        default:
                y++;
        case 3:
                y++;
                break;
        case 4:
                y++;
}

System.out.println("y="+y);
答案是5,我知道是case穿透的相关知识,
但是经过第一个语句 y是4
但第二个语句x不等于3啊,为什么还会执行呢?

4 个回复

倒序浏览
首先。。一般编程需要有个良好的编程习惯,所以一般来说default缺省语句放在最后。
其次,代码是一行一行往下执行的,由于你把default写在头,而且最重要是没有break语句,所以,java把default和case3看成了是用一个代码库,就等于是
{
            default:
                y++;
        case 3:
                y++;
                break;
}
程序第一次就来值就直接走了default,然后你没有写break,所以程序感觉case3也是default的一部分,所以不需要判断x是不是等于3,直接再走了一次y++;
所以应该把default放在代码最后面,但是这样改还不够,由于你case4里面也没写break语句,所以当你将default放在最后面,当x=4的时候,y也会等于5.
所以你要明白代码是一行一行往下执行,其次编程要严谨,当进入了一个case语句后就应该有终止语句break,不然代码会一直往下走,不会跳出知道代码结束完或者遇到终止语句。
遇到这种问题,以后当你使用eclipse的时候自己可以断点看程序怎么走的。目前学习阶段还是用文本直接写代码好
回复 使用道具 举报
第一、switch语句执行流程:
1:首先计算表达式的值。
2:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
3:如果没有匹配,就执行default的语句体。
第二、switch语句的结束条件:
1:遇到break就结束
2:执行到末尾就结束
第三、default语句的作用:
1:如果所有的情况都不匹配,就执行default,相当于if语句中的else
2.default不一定要在最后,可以在任意位置。但是建议在最后。

int x = 2;
由于switch语句中没有与之匹配的case值,所以就执行到了default语句中,y++就成了4.
由于default语句中没有“break;”,所以就形成了穿透,直接穿透到了“case3”中,y++就成了5,遇到break就结束了。
所以,最后打印y的值就成了5

希望能帮到楼主
回复 使用道具 举报
1158147908 来自手机 中级黑马 2015-12-31 20:56:25
板凳
因为执行完default后没有break呀。所以会继续执行,直到遇到break
回复 使用道具 举报
楼上的大神解释的好
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马