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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马如龙 中级黑马   /  2014-7-29 23:43  /  1364 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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 , 求高手解释

8 个回复

正序浏览
default执行完后,因为没有break,所以会接着往下执行,一直到switch结束。
回复 使用道具 举报
DSY 发表于 2014-7-30 00:04
switch(表达式)从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break ...

受教了,谢谢
回复 使用道具 举报
switch语句有问题,并没有按照一般的case执行,在没遇到}之前执行了default下面的所有case,在没有braek的情况下,直到整个switch语句执行完才结束。所以y=6.
回复 使用道具 举报
因为你没有定义break,break的作用是跳出,你不定义的话,就算找到了匹配的case语句程序也会一直执行下去知道遇到break或者一直到switch结尾。因为两个case都不符合,所以就先执行default,但是default后面没有break,所以只能继续执行,直到switch结尾
回复 使用道具 举报
首先先执行的是case语句,,case3,case4都不满足,此时再执行default语句,y++,这时候y变为4,但是如果要想结束,必须有两个条件之一,其中一个是break,一个是switch执行完,default之后没有break,也没有switch的“}”证明没有结束,此时可以穿透default继续执行case3和case4,两次y++,这时候y变为6,遇到“}”所以switch 停止,结果是6.
回复 使用道具 举报
2.3楼正解要么break,要么继续向下执行看,到语句结束。
回复 使用道具 举报
switch的结束,只有俩种可能,1:break,2.switch执行完了。而你没有写break,故y=6!
回复 使用道具 举报
switch(表达式)从表达式值等于某个case语句后的值开始,它下方的所有语句都会一直运行,直到遇到一个break为止。假如任何一个case语句的值都不等于表达式的值,就运行可选标签default之下的语句。这段代码,由于没有匹配的,default下的switch体内的语句都运行了,所以结果是6
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马