switch 语句会根据表达式的值从相匹配的 case 标签处开始执行,一直执行到 break 语句处或者是 switch 语句的末尾。如果表达式的值与任一 case 值不匹配,则进入 default 语句(如果存在)。根据表达式值的不同可以执行许多不同的操作。其语法结构如下:

switch (表达式) {
    case 值1:
         语句序列1;
         [break];
    case 值2:
         语句序列2;
         [break];
    // ...
    [default:默认语句;]
}

中括号里的为可选项。

switch 语句中 case 标签在JDK1.5之前必须是int / byte / short / char 或者枚举,在JDK1.7之后才允许使用字符串 String

穿透现象:在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束。例如:

char grade = 'A';
switch (grade){
    case 'A':
        System.out.println("优秀");
    case 'B':
        System.out.println("良好");
    case 'C':
        System.out.println("及格");
}

输出结果为:

优秀
良好
及格

所以为了防止代码的穿透现象,要在每个分支后面加上一个 break

注意事项:

  • default 分支可以写在任意的位置上,但是如果没有在最后一行,后面必须加上 break ,如果在最后一行的话,break 就可以省略

  • 如果相邻分支逻辑是一样的,那么就可以只保留最后一个分支语句,上面的都可以省去不写了,例如:

    switch(score/10){
        case 10 : 
        case 9 : 
            System.out.println("A级");
            break;
        case 8 : 
            System.out.println("B级");
            break;
        case 7 : 
            System.out.println("C级");
            break;
        case 6 : 
            System.out.println("D级");
            break;
        default:
            System.out.println("成绩错误");
            break;
        case 5 :  
        case 4 :  
        case 3 :  
        case 2 :  
        case 1 :  
        case 0 : 
            System.out.println("E级");
            break;
    }
    
  • switch 语句的应用场合是需要进行等值判断且等值的情况比较少的时候