传统的 switch 语句容易引发谬误,如果其中某个 case 漏写了 break 语句,那么程序会持续往下执行直到遇到 break 语句,比方:
switch (age) {
case 10:
System.out.println("age is 10");
case 20:
System.out.println("age is 20");
break;
default:
break;
}
在 case 10
处缺失了 break 语句,当程序匹配到 case 10
后,会持续往下执行,失去的输入是:
age is 10
age is 20
这显然不是咱们想要的输入,这种因为短少了 break 语句而引发的谬误很常见,咱们写代码的时候一不小心就会漏写 break 语句。
Java 12 中首次提及 switch 语句改良,而在 Java 13 中这种改良失去更进一步的进步。具体有:
- 反对一个 case 匹配多个值 ,以往咱们匹配多个值的时候须要写多个 case 语句,如:
switch (age) {
case 10:
case 20:
case 30:
System.out.println("");
}
当初能够这样写:
switch (age) {
case 10, 20, 30:
System.out.println("");
}
- 增加
yield
关键字 ,yield
能够返回 switch 一个分支的值,且不必增加 break 语句就能从分支中退出:
int val = switch (age) {
case 10:
yield 0;
case 20:
yield 1;
}
- 增加作用域标识 ,在 case 之后增加
{}
能够使这个 case 中的语句与其余 case 中的语句隔离开来;如果咱们在传统的 case 语句中申明变量,那么这些变量的作用域是整个 switch 语句:
switch (age) {
case 10 :
int b = 0;
break;
case 20:
int b = 1; // 报错:`b` is already defined in the scope
break;
}
改良之后:
switch (age) {
case 10: {
int b = 0;
break;
}
case 20: {
int b = 1; // 编译通过
break;
}
}
留神,增加 {}
作用域后仍须要写上 break 语句。
- 反对箭头表达式 ,如:
switch (age) {
case 10 -> age++;
case 20 -> throw new IllegalArgumentException(age);
case 30 -> {
age++;
System.out.println(age);
}
}
箭头右侧反对:
- 语句 / 表达式;
- throw 语句;
{}
作用域;
应用箭头表达式的益处是不必写 break 语句,Java 只会匹配一个 case。
参考资料:
https://www.geeksforgeeks.org…