传统的 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 语句;
{}
作用域;
【Java 13 的 switch 语句改进】参考资料:
https://www.geeksforgeeks.org...
推荐阅读
- 面试官(Spring MVC 如何保证 Controller 的并发安全性(面试必问。。))
- 百度|这个微信小程序开源!
- 教程|云原生微服务架构实战精讲第九节 Prometheus/Grafana处理指标和Fluentd、Elasticsearch、 Kibana管理日志
- Java|Java书城项目第三阶段(优化)
- spring|Spring5架构,万字文章带你学习
- SpringMVC|SpringMVC五(springMVC视图)
- Software|IntelliJ IDEA2021.1安装配置流程(完整版教程)
- Software|如何在IDEA上设置自定义Scanner scanner = new Scanner(System.in);的快捷键
- #|华为机试第六题(HJ6 质数因子)