Java中switch支持的数据类型随版本演进持续扩展:Java 1–6支持byte、short、char、int及对应包装类;Java 5支持enum;Java 7支持String;Java 12引入switch表达式;Java 14起支持类型模式;Java 17支持sealed类模式匹配;Java 21正式落地完整模式匹配特性。
Java中switch支持的数据类型随着版本演进不断扩展:从最初的byte、short、char、int及其包装类,到Java 5支持枚举(enum),Java 7支持String,再到Java 14引入模式匹配预览(JEP 305)、Java 17正式支持sealed类的模式匹配,以及Java 21将switch模式匹配转为正式特性(JEP 441)。
最初,switch仅接受能隐式转为int的整数类型:
byte、short、char、int
Byte、Short、Character、Integer(自动拆箱后参与比较)long不支持——编译报错“incompatible types”Java 5起可直接用enum常量作为case值;Java 7起允许String(内部通过hashCode()和equals()实现,非单纯哈希跳转):
DayOfWeek.MONDAY
String区分大小写,且null传入会抛NullPointerException(需提前判空)Java 12开始引入switch表达式(带->箭头语法,自动终止,无fall-through),Java 14起支持类型模式(如case String s -> s.length()),Java 21正式落地完整模式匹配:
case Integer i -> i * 2
case null, String s, Integer i -> ...
case Point(int x, int y) -> x + y
default),编译器强制穷尽性检查(尤其配合sealed类时)实际使用中需注意版本兼容性和语义变化:
break语句在switch表达式中不允许出现(会编译错误)->则完全隔离各分支case List l ——模式匹配只支持具体类型或其子类型