在 jdk 21 中,使用 switch 表达式匹配范围值的核心做法是直接在 case 标签中使用模式匹配的区间语法,例如 case 10, 20..30 ->。这种写法利用 .. 操作符定义连续的范围,并自动处理类型检查与空值安全,相比传统的 if-else 链或枚举映射更加简洁且不易出错。只需确保目标变量为 int、integer 或兼容的数值类型,即可直接返回结果或执行代码块。

如何区分传统 switch 与 JDK 21 的模式匹配 switch?
JDK 21 引入的模式匹配 switch 允许在 case 子句中直接使用 instanceof 风格的模式,同时支持文本模式和范围模式。传统 switch 仅支持常量表达式,而新特性允许将变量绑定到模式匹配的对象上,并支持范围判断。这使得代码逻辑更贴近业务意图,减少了显式的类型转换和条件判断。

public class RangeSwitchDemo {
public static void main(String[] args) {
int score = 85;
String result = switch (score) {
case 0..49 -> "Fail";
case 50..69 -> "Pass";
case 70..89 -> "Good";
case 90..100 -> "Excellent";
default -> "Invalid Score";
};
System.out.println("Score: " + score + ", Result: " + result);
}
}
运行上述代码,输入 85,预期输出为:Score: 85, Result: Good
如何处理 null 值及非连续范围的组合匹配?
在 JDK 21 中,switch 表达式天然支持 null 值的处理,可以通过 null -> 分支明确指定当输入为 null 时的行为,避免抛出 NullPointerException。对于非连续范围,可以使用逗号分隔多个条件,如 case 1, 3, 5, 10..20 ->,实现灵活的条件组合。这种写法不仅提高了可读性,还确保了所有可能情况的覆盖。

public class NullAndRangeSwitchDemo {
public static void main(String[] args) {
Integer value = null;
String description = switch (value) {
case null -> "Value is null";
case 1, 3, 5 -> "Odd small number";
case 10..20 -> "Range 10 to 20";
default -> "Other value";
};
System.out.println("Description: " + description);
}
}
运行上述代码,输入 null,预期输出为:Description: Value is null
基于程序中某个输入、条件或结果的具体问题
当输入值为 75 时,程序会匹配到 case 70..89 -> "Good" 分支,返回字符串 "Good"。这是因为 75 落在 70 到 89 的闭区间内,符合模式匹配的范围定义。该行为由 switch 表达式的顺序匹配机制保证,一旦找到第一个匹配项即停止后续判断,确保结果确定且高效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











