case穿透
解释:switch语句中,case省略了break,就会发生case穿透,后续的case语句不具有匹配效果,内部的语句都会执行;直到看见break,或switch执行结束,穿透才会结束。
举例:输入星期,1-5表示工作日,6-7表示休息日,其他表示输入有误
import java.util.Scanner;
public class text0507 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("今天星期几?");
int day = sc.nextInt();
switch (day) {
case 1:
System.out.println("工作日");
break;
case 2:
System.out.println("工作日");
break;
case 3:
System.out.println("工作日");
break;
case 4:
System.out.println("工作日");
break;
case 5:
System.out.println("工作日");
break;
case 6:
System.out.println("休息日");
break;
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入有误");
break;
}
}
}
那什么是“case省略了break,就会发生case穿透”?看以下代码:
case 1:
System.out.println("工作日1");
case 2:
System.out.println("工作日2");
break;
会有以下输出:
输入1,会执行工作日1这条语句,但是因为没有break,所以会向下穿透,直到输出工作日2并遇到break,结束。
在代码实现中,忘记break不可避免会造成一些代码错误,但是合理使用case穿透,也会有好的效果,比如可以将上面的代码进行如下优化:
import java.util.Scanner;
public class text0507 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("今天星期几?");
int day = sc.nextInt();
switch (day) {
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入有误");
break;
}
}
}