本帖主要研究switch语句的以下几个细节:
1.default语句在什么情况下执行?
2.什么情况下才会去判断case语句?
3.break;的重要性,为什么default最好写在最后?
先上代码:
[Java] 纯文本查看 复制代码 public class SwitchTest1 {
public static void main(String[] args) {
String sa = "a";
String sb = "b";
String sc = "c";
//常规用法,输出"a",先判断case "a"为true,执行冒号内的语句,然后遇到break;跳出swicth。
switch(sa) {
case "a":
System.out.println("a");
break;
case "b":
System.out.println("b");
break;
default:
System.out.println("default");
}
System.out.println("---------------");
//去掉case "a":内的break;输出了"a""b",case "b":并不可能为true,
//结论:case判断为true任意一次后,忽略之后的所有case判断而直接执行其中的内容
switch(sa) {
case "a":
System.out.println("a");
case "b":
System.out.println("b");
break;
default:
System.out.println("default");
}
System.out.println("---------------");
//去掉case "a":和case "b":内的break;输出了"a""b""default",case "b":以及default:并不可能为true,
//结论:case判断为true任意一次后,忽略之后的所有case判断以及default判断而直接执行其中的内容
switch(sa) {
case "a":
System.out.println("a");
case "b":
System.out.println("b");
default:
System.out.println("default");
}
System.out.println("---------------");
//输出了"a""b"
//结论:验证之前结论的同时,也证明了case判断成功后,不会去寻找default语句执行。
switch(sa) {
default:
System.out.println("default");
case "a":
System.out.println("a");
case "b":
System.out.println("b");
}
System.out.println("---------------");
//输出了"default""a""b"
//结论:验证之前结论的同时,也证明了所有的case判断失败后,会去寻找default语句执行。不论default语句在什么位置。
//**并且结合之前的结论可知,case、default语句任意一次true后,就会跳过switch内之后所有的case和default的判断,执行所有其他语句。
switch(sc) {
default:
System.out.println("default");
case "a":
System.out.println("a");
case "b":
System.out.println("b");
}
System.out.println("---------------");
}
}
由以上的代码我们可以得出几个结论:
1.switch内的所有case判断失败后,才会去寻找default,且不论default写在switch内的哪一行。
2.开始运行switch块时,才会判断case语句,任意一次判断成功后,就会忽略之后所有的case和default。
***或者说,case x:、default:代码的执行通过任何一次冒号后,所有的case和default将失效。
3.因为以上的执行顺序,所以每个case内都需要写break;语句跳出switch块,以免执行到其他条件的语句。
***以及,如果所有case判断失败,去执行default语句时,default内既没有写break;又不是最后的代码,也会导致执行到其他条件的语句,***所以default要放在所有的case之后。 |