You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Java switch语句中case a合法、case b非法?

Java switch case 常量合法性问题原因

你给出的代码如下:

final int a=2;
final int b;
b=3;

switch(num){
    case a : // Legal
    case b : //Illegal
}

出现该问题的核心原因是Java语法对switch的case值有明确约束:

  • case后必须跟编译期可确定值的常量表达式,编译阶段就需要完成值的校验和分支映射。
  • 变量a满足要求:它是被final修饰的基本类型变量,声明时就直接赋值为2,编译阶段就能确定它的值永远不会改变,属于编译时常量,可以放在case后。
  • 变量b不满足要求:它属于空白final变量,虽然也被final修饰、运行期间只会赋值一次,但它的赋值操作是在代码运行阶段执行的,编译阶段编译器无法提前得知它的具体值,不属于编译时常量,因此不能放在case后,会被判定为语法错误。

内容的提问来源于stack exchange,提问作者sha sha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:00:03