传统的switch语句容易出错。如果其中一种情况省略了break语句,程序将继续执行,直到遇到break语句,如:switch(age){case10:System.out.println("ageis10");case20:System.out.println("ageis20");休息;default:break;}case10处缺少break语句,当程序匹配到case10后,会继续执行,得到的输出为:ageis10ageis20这显然不是我们想要的输出。这种由于缺少break语句而导致的错误很常见。我们在写代码的时候,一不小心就会漏掉break语句。switch语句的改进在Java12中首次被提及,并在Java13中得到进一步改进。具体来说:它支持一种情况匹配多个值。以前我们匹配多个值的时候,需要写多个case语句,比如:switch(age){case10:case20:case30:System.out.println("");}现在可以了写成这样:switch(age){case10,20,30:System.out.println("");}加上yield关键字,yield不用加break语句就可以返回switch某个分支的值就可以退出来自分支:intval=switch(age){case10:yield0;case20:yield1;}添加作用域标识符,在case后添加{},使本case的语句与其他case的语句不同;如果我们在传统的case语句中声明变量,那么这些变量的作用域就是整个switch语句:switch(age){case10:intb=0;休息;案例20:intb=1;//错误:`b`已经在作用域中定义break;}改进后:switch(age){case10:{intb=0;休息;}案例20:{intb=1;//编译通过break;}}请注意,在添加{}范围后,您仍然需要编写break语句。支持箭头表达式,如:switch(age){case10->age++;案例20->抛出新的IllegalArgumentException(age);案例30->{年龄++;System.out.println(年龄);}}右边的箭头支持:语句/表达式;抛出语句;{}范围;使用箭头表达式的好处是不需要写break语句,Java只会匹配一种情况。参考资料:enhancements-for-switch-statement-in-java-13
