Java switch 语句(为什么这是非法的?)

Java switch statement (why is this illegal?)

        final int a=2;
        final int b;
        b=3;
        
        switch(num){
            case a : // Legal
            case b : //Illegal
        }

案例 a 合法案例 b 非法.

谁能解释为什么?

switch 语句需要常量表达式大小写标签。

虽然 b 是代码执行后的常量(因此 final 有效),但它不是 JLS 意义上的常量表达式:https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.28