Java中switch语句支持byte、short、int、char、枚举、String及对应包装类,不支持long、double等;case需常量且不可重复,省略break会导致贯穿;default非必需但建议添加以增强健壮性。Java 中的 `switch` 语句是一种多分支选择结构,用来根据一个表达式的值,从多个固定选项中选出一条路径执行。它比一连串 `if-else if` 更简洁、可读性更强,特别适合处理“等值判断”场景。
表达式结果必须是以下类型之一:
hashCode() + equals() 判断)不支持 long、double、float、boolean 或普通对象——如果硬要用,得先强制转成允许类型(比如 (int)myLong),但要注意精度丢失。
每个 case 后跟一个常量(编译期确定的值),与 switch 表达式结果逐个比较。一旦匹配,就从该 case 开始向下顺序执行,直到遇到 break 或 switch 结束。
省略 break 会导致“贯穿(fall-through)”——这是设计特性,不是 bug。例如:
case 1:
System.out.print("A");
case 2:
System.out.print("B");
当表达式为 1 时,会同时输出 AB。合理利用能简化逻辑(比如多个值共用同一段代码),但多数时候要记得加 break。
default 相当于“兜底”,在所有 case 都不匹配时执行。它不强制放在最后,但习惯上放末尾更清晰。即使你认为“不可能不匹配”,也建议写上 default 并至少加个日志或抛异常——这能帮你早发现非法输入或逻辑遗漏。
case 值必须是常量表达式,不能是变量或运算结果(如 case i+1: 不合法)case 值不能重复,否则编译报错"A" 和 "a" 是不同 casecase Day.MONDAY:,不用加类名前缀基本上就这些。用对了,switch 让代码干净利落;漏了 break 或类型搞错,可能跑出意料之外的结果。