switch变种玩法

标准版本:
switch(表达式) {       
        case 值1:
            语句体1;
            break;
        case 值2:
            语句体2;
            break;
        ...
        default:
            语句体n+1;
            break;
    }
  • switch:说明这是switch语句。
  • 表达式:可以是byte,short,int,char

​ JDK5以后可以是枚举

​ JDK7以后可以是字符串

  • case:后面的值就是要和表达式进行比较的值
  • break:表示程序到这里中断,跳出switch语句
  • default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else

“作死”用法

要彻底弄懂switch语句,就要明白default在不同位置,语句中是否包含break的各种语句组合可能性。归纳一下,其实很简单,大约就下面三种具有代表性的可能。我们稍微“作一下”,看大家是否还能快速地解出正确的答案呢?

class SwitchTest {
    public static void main(String[] args) {
    int x = 2;
    int y = 3;
    switch(x){
        default:
            y++;
        case 3:
            y++;
        case 4:
            y++;
    }
    System.out.println("y="y);  //答案为6,虽然在case里面都不匹配,但由上而下穿透,依次加1
    System.out.println("---------------");
    
    int a = 2;
    int b = 3;
    switch(a){
        case 3:
            b++;
        case 4:
            b++;
        default:
            b++;
        case 5:
            b++
    }
    System.out.println("b="b);  //答案为5,虽然在case里面都不匹配,从default开始穿透,依次加1
    System.out.println("---------------");
    
    int c = 4;
    int d = 3;
    switch(c){
        case 3:
            d++;
        case 4:
            d++;
        default:
            d++;
        case 5:
            d++;
            break;
        case 6:
            d++;
    }
    System.out.println("d="d);  //答案为6,从case 4开始到case 5遇到break结束,依次加1
    System.out.println("---------------");
}

由上面的结果可以看出,不同的格式,他们所得出的结果也就不同。但以上的“作死”用法只是为了让大家更加深入地了解switch的机制,一般不会用到的。

注意事项:

  • case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
  • default可以省略吗?

    可以,但不建议,因为它的作用是对不正确的情况给出提示。

  • break可以省略吗?

    可以,但不建议,因为会出现case穿透现象。

  • default一定要在最后吗?

    可以在任意位置,但是再不同的位置产生的效果也就不一样

  • switch语句的结束条件

    • 遇到break就结束
    • 执行到末尾就结束
      .
      .

 

参考:https://www.jianshu.com/p/7d4afd256142

原文地址:https://www.cnblogs.com/kunmomo/p/10202156.html