黑马程序员技术交流社区

标题: 关于++ --的问题,y的值怎么会是7呢. [打印本页]

作者: 253663946    时间: 2016-4-8 20:16
标题: 关于++ --的问题,y的值怎么会是7呢.
class Demo {
       public static void main(String[] args) {
               int x = 3,y = 4 ;
               switch(x) {
                     case 0:
                        y++;  
                    default:
                        y++;
                   case 1:
                        y++;
                   case 2:
                        y++
                  System.out.println(y);
}
}
}
作者: 15614014298    时间: 2016-4-8 21:38
第一步执行default:y++,y=5
第二步执行到case1:y++,y=6
第三步执行到case2:y++,y=7
然后switch执行完毕,打印的y的值就是7
注,因为你执行的每个case并没有让switch结束,所以switch会一直执行下去
作者: 李亚东_JAVAEE    时间: 2016-4-8 22:24
//本题考查case穿透现象
class Demo {
       public static void main(String[] args) {
               int x = 3,y = 4 ;
               switch(x) {
                     case 0:   //x=0显然不符合,这种情况跳过,不执行
                        y++;  
                    default:  //x!=0,1,2,所以执行default,
                        y++;  //y=5
                   case 1:    //因为上面没有break;故发生case穿透现象,向下继续执行!
                        y++;  //y=6
                   case 2:
                        y++   //y=7
                  System.out.println(y);
}
}
}
作者: Petergee    时间: 2016-4-8 22:35

class Demo {
       public static void main(String[] args) {
               int x = 3,y = 4 ;
               switch(x) {
                     case 0:
                        y++;  
                    default:
                        y++;
                   case 1:
                        y++;
                   case 2:
                        y++
                  System.out.println(y);
}
}
}
针对以上代码,由于case后面没有设置break,无法跳出,则会先跳转至dafault,
然后依次向下执行,至程序结束为止。
首先执行dafault,y++,y=5;
继续执行case1,y++,y=6;
继续执行case2,y++,y=7,
程序结束,输出y=7.
作者: huweixiong    时间: 2016-4-8 22:44
我觉也是7
作者: 253663946    时间: 2016-4-9 22:15
Petergee 发表于 2016-4-8 22:35
class Demo {
       public static void main(String[] args) {
               int x = 3,y = 4 ;

哦.原来这个样的啊.明白了.我之前大意没有想到break
作者: 253663946    时间: 2016-4-9 22:17
李亚东_JAVAEE 发表于 2016-4-8 22:24
//本题考查case穿透现象
class Demo {
       public static void main(String[] args) {

恩恩,受教了
作者: 253663946    时间: 2016-4-9 22:22
15614014298 发表于 2016-4-8 21:38
第一步执行default:y++,y=5
第二步执行到case1:y++,y=6
第三步执行到case2:y++,y=7

恩恩.明白了,谢谢哈
作者: 兵蜂    时间: 2016-4-9 22:49
default 与case的优先级; case 穿透
作者: CX898855195    时间: 2016-4-9 22:58
因为case穿透了啊
作者: zq19931995    时间: 2016-4-9 23:10
简单的穿透问题 楼上都给回复了 我就默默顶下吧
作者: lmr1096200234    时间: 2016-4-9 23:35
慢慢分析 就知道了  
作者: 253663946    时间: 2016-4-11 11:04
兵蜂 发表于 2016-4-9 22:49
default 与case的优先级; case 穿透

好的,谢谢了
作者: toukya    时间: 2016-4-11 11:26
不是很正常吗?
作者: lidandan    时间: 2016-4-11 11:57
赞一个,好问题
作者: 65708535    时间: 2016-4-11 12:02
不动就问是好习惯,我喜欢自己研究,浪费大把时间,哎...




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