在JDK 17中,switch
语句得到了显著的增强,引入了模式匹配(Pattern Matching)等特性,使得代码更加简洁、高效。以下是JDK 17中switch
语句的主要用法和特点:
1. 格式变化
在JDK 17中,switch
语句的格式发生了改变,主要体现在以下几个方面:
- 冒号变为箭头:传统的
switch
语句中的冒号(:
)在JDK 17中被箭头(->
)所替代。 - 支持模式匹配:可以在
case
标签中使用类型模式进行匹配,而不仅仅是常量值。 - 支持多个值:一个
case
标签可以匹配多个值,使用逗号分隔。 - 不需要
break
:在switch
表达式中,由于每个case
后直接跟随箭头和表达式或代码块,因此不需要break
语句来阻止代码穿透。
2. 用法示例
作为普通语句使用
String score = "C";
switch (score) {
case "A", "B" -> System.out.println("成绩不错");
case "C", "D", "F" -> System.out.println("成绩不足");
default -> System.out.println("成绩输入错误");
}
作为表达式使用
在JDK 17中,switch
语句也可以作为一个表达式使用,其返回值可以被赋给变量。
String score = "B";
String judge = switch (score) {
case "A", "B" -> "成绩还不错,继续保持";
case "C", "D", "F" -> "成绩不足,继续努努力";
default -> "成绩输入错误";
};
System.out.println(judge); // 输出: 成绩还不错,继续保持
如果case
块中有多条语句,并且需要返回值,可以使用大括号{}
包围代码块,并使用yield
关键字来返回值。
String score = "B";
String judge = switch (score) {
case "A", "B" -> {
System.out.println("成绩不错");
yield "优良";
}
case "C", "D", "F" -> {
System.out.println("成绩不足,继续努力");
yield "不足";
}
default -> "成绩输入错误";
};
System.out.println(judge); // 输出: 成绩不错
// 接着输出: 优良
3. 模式匹配
在JDK 17中,switch
语句支持模式匹配,这意味着你可以在case
标签中直接匹配对象的类型,并执行相应的操作。
Object obj = "Hello";
switch (obj) {
case String s -> System.out.println("处理字符串: " + s);
case Integer i -> System.out.println("处理整数: " + i);
case null -> System.out.println("处理null值");
default -> System.out.println("未知类型");
}
4. 注意事项
- 在使用
switch
表达式时,如果case
块中有多条语句且需要返回值,必须使用大括号{}
包围代码块,并使用yield
关键字返回值。 - 在使用
switch
语句进行模式匹配时,需要确保选择器表达式的类型与case
标签中的模式类型兼容。 - JDK 17中的
switch
语句增强了类型检查,选择器表达式的类型可以是基本类型或任何引用类型(包括null
)。
综上所述,JDK 17中的switch
语句通过引入模式匹配、支持多个值匹配、改变格式以及作为表达式使用等特性,极大地提高了代码的简洁性和可读性。