2 cairunbo cairunbo 于 2016.03.14 17:10 提问

关于Switch语句,求大神解答!感谢!

public class HelloWorld {
public static void main(String[] args) {
int num=1;
switch(num){
case 1:
System.out.println("1");
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
default:
System.out.println("4");

    }
}

小弟学习Java时遇到的问题,:关于上述代码,如果把case1后面的break去掉,我能理解case1的语句能执行,到case2后面的break终止,但是switch中num的值和case2后面的值不匹配,为什么会执行case2后面的语句呢?

十分感谢帮忙的大神!

12个回答

qq_32224861
qq_32224861   2016.03.14 17:32
已采纳

switch这个开关,他会去找是否有和num这个数值相等的case 值,有的话就会执行后面的输出语句,注意,一旦判断成功了,不管后面的case 值是多少,程序都会
执行相应的输出语句,所以,通常情况下为了避免此错误,都会在每个case的逻辑语句后面加上一个 break,一旦执行成功,就会跳出switch。

cairunbo
cairunbo 这个解释很有意思,容易理解!感谢
接近 2 年之前 回复
lan410812571
lan410812571   2016.03.14 17:27

你可以这样理解,第一次判断num=1就是相当于买了一张电影票进去放映厅了,只要不碰到清场(break),他看完1号厅的电影还可以接着去看2号厅的电影,
直到碰到清场(break)才会从电影院赶出来。当然,现实中电影院没有清场这一说,一般也没有人看完一场留在里面看第二场。

Joson_Wang
Joson_Wang   2016.03.14 17:51

swich case其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

cairunbo
cairunbo 感谢
接近 2 年之前 回复
Joson_Wang
Joson_Wang   2016.03.14 17:51

swich case其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

cairunbo
cairunbo 感谢!
一年多之前 回复
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.14 17:52

这个问题是switch语句的语法决定的,如果某个分支进入后没有break语句,无论值是否满足下一个分支都会执行的,所以使用switch必须细心避免这个陷阱。

cairunbo
cairunbo 感谢!
接近 2 年之前 回复
sinat_28603977
sinat_28603977   2016.03.14 17:20

你case1后面没加break呀

qq_34287787
qq_34287787   2016.03.14 17:24

当语句执行碰到break 才会终止

qq_31201107
qq_31201107   2016.03.14 17:25

case 2后面不会执行了吧!

qq_33844778
qq_33844778   2016.03.14 17:28

case1后面加break,跳出switch语句,不做后面的case

zhonglong8
zhonglong8   2016.03.14 17:47

你如果不再case后面加break的话他就会继续往下执行,执行到case2的时候的时候发现num的值不对了就会跳出循环。

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!