黑马程序员技术交流社区

标题: 求解释,switch问题 [打印本页]

作者: 马如龙    时间: 2014-7-29 23:43
标题: 求解释,switch问题
  1. int x = 2,y=3;

  2. switch(x)
  3. {
  4. default:
  5. y++;
  6. case 3:
  7. y++;
  8. case 4:
  9. y++;
  10. }

  11. System.out.println("y="+y);
复制代码

结果为什么是 y=6 , 求高手解释
作者: DSY    时间: 2014-7-30 00:04
switch(表达式)从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。这段代码,由于没有匹配的,default下的switch体内的语句都运行了,所以结果是6
作者: 黄宝宝    时间: 2014-7-30 00:04
switch的结束,只有俩种可能,1:break,2.switch执行完了。而你没有写break,故y=6!
作者: dreamseekerkun    时间: 2014-7-30 01:07
2.3楼正解要么break,要么继续向下执行看,到语句结束。
作者: WJN_YES    时间: 2014-7-30 08:16
首先先执行的是case语句,,case3,case4都不满足,此时再执行default语句,y++,这时候y变为4,但是如果要想结束,必须有两个条件之一,其中一个是break,一个是switch执行完,default之后没有break,也没有switch的“}”证明没有结束,此时可以穿透default继续执行case3和case4,两次y++,这时候y变为6,遇到“}”所以switch 停止,结果是6.
作者: lcl    时间: 2014-7-30 08:34
因为你没有定义break,break的作用是跳出,你不定义的话,就算找到了匹配的case语句程序也会一直执行下去知道遇到break或者一直到switch结尾。因为两个case都不符合,所以就先执行default,但是default后面没有break,所以只能继续执行,直到switch结尾
作者: 1165577865    时间: 2014-7-30 08:39
switch语句有问题,并没有按照一般的case执行,在没遇到}之前执行了default下面的所有case,在没有braek的情况下,直到整个switch语句执行完才结束。所以y=6.
作者: 马如龙    时间: 2014-7-30 16:03
DSY 发表于 2014-7-30 00:04
switch(表达式)从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break ...

受教了,谢谢
作者: endian11    时间: 2014-7-30 17:27
default执行完后,因为没有break,所以会接着往下执行,一直到switch结束。




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