vlambda博客
学习文章列表

JDK14版本开始支持的switch表达式

switch表达式

耿祥义视讲解

2020-12-20

1.  switch表达式的动机

      传统的switch语句里通过使用break控制分支的执行,许多break语句使switch语句变得不必要地冗长。另外,一旦丢失break,意味着分支失控。

2. switch表达式的格式

switch(开关值){
       case 常量值  -> 表达式 ;
       case 常量值  -> 表达式 ;
       ... ...
       default   -> 表达式
  }
①各个case表达式要么都有值,要么都没有值。
②如果各个case表达式都有值,就必须有default(否则可以省略)。 
③开关值的类型可以是 byte, short,char,int ,String,enum 不可以是long)
★switch表达式的值 
●如果开关值等于case的常量值,switch表达式的值就是该case给出的表达式的值。如果开关值不和任何case匹配,switch表达式的值就是default给出的表达式的值。
如果表达式都是无值表达式,switch表达式也是无值表达式。

3. 扩展

switch(开关值){
        case 一组用逗号分隔的常量值  -> 表达式 ;
        case 一组用逗号分隔的常量值  -> 表达式 ;
       ... ...
        default   -> 表达式
 }
●如果开关值等于case给出的某个常量值,switch表达式的值就是该case给出的表达式的值。如果开关值不和任何case匹配,switch表达式的值就是default给出的表达式的值。
●如果表达式都是无值表达式,switch表达式也是无值表达式。


4.例子
(1)
public class E {
    public static void main(String args[]) {
         int m =5,n =10;
         char c = '+';
         double result  = 0;
         result= switch (c) {
           case '+' -> m+n ; 
           case '-'  -> m-n;
           case '*'  -> m*n;
           case '/'  -> m/n;
           default  ->  Double.NaN;
         } ;
         System.out.println(result);
    }
}
(2)
public class E2 {
    public static void main(String args[]) {
           int month = 2; 
           byte result = switch (month) {
           case 1,3,5,7,8,10,12  -> 31;
           case 4,6,9,11             -> 30;
           case 2                       -> 28;
           default                      -> -1;
         };
         System.out.println(result);
    }
}
(3)
public class E3 {
    public static void main(String args[]) {
         byte m =5;
         switch (m) {
           case 1,2,3 -> System.out.println("一季度");
           case 4,5,6 -> System.out.println("二季度");
           case 7,8,9 -> System.out.println("三季度");
           case 10,11,12 -> System.out.println("四季度");
        } 
    }

推荐阅读