Java switch支持byte、short、char、int及其包装类,枚举类型,String,以及switch表达式(Java 14+)同样适用;不支持long、float、double、boolean及自定义类等。

Java 的 switch 表达式支持的数据类型是有限制的,核心原则是:**必须能被编译器在编译期确定为一个确定的、可比较的整数值,或具有明确哈希与相等语义的引用类型**。目前(截至 Java 21,兼容至 2026 年),它支持以下六类:
基础整数类型及其包装类
包括 byte、short、char、int 四种基本类型,以及对应的包装类 Byte、Short、Character、Integer。编译器会自动对包装类执行拆箱操作,转为对应的基本类型参与判断。
枚举类型(enum)
从 Java 5 开始支持。每个枚举常量在底层都有唯一的 ordinal() 值(int 类型),所以 switch 实际上是基于这个序号做跳转。使用时直接写枚举常量名,无需加类名前缀(如 case OPEN:)。
String 类型
从 Java 7 起支持。注意:String 不是靠 == 比较,而是通过 equals() 判断内容相等;编译器会先检查字符串是否为 null(若为 null 且无 default,运行时抛 NullPointerException)。内部实现上,JVM 会对常量字符串做哈希优化,但开发者无需关心细节。
立即学习“Java免费学习笔记(深入)”;
switch 表达式(Java 14+)额外说明
Java 14 引入的 switch 表达式(用 -> 替代 :,支持返回值)同样只接受上述类型。它不允许 fall-through,也不强制要求每个分支都带 break;但所有可能路径必须有返回值,且类型需统一。
不支持的类型包括:long、float、double、boolean,以及任意其他自定义类、数组、记录(record)等。它们既不能隐式转成 int,也没有标准的、编译期可验证的相等判定机制。


















