【问题标题】:Java switch statement (why is this illegal?) [duplicate]Java switch 语句(为什么这是非法的?)[重复]
【发布时间】:2021-09-03 19:00:03
【问题描述】:
        final int a=2;
        final int b;
        b=3;
        
        switch(num){
            case a : // Legal
            case b : //Illegal
        }

case a合法,但case b非法

谁能解释一下原因?

【问题讨论】:

  • 您不能重新分配最终变量。要么给 b 分配一个数字,要么让它不是最终的。
  • 这里的编译错误是什么?
  • 请注意b 未初始化。我们不会在b=3 中更改它的值——它是初始化。这是合法的。这里的问题是switch 不知道这一点。大致要求标签看起来像final x = ....
  • 找到了一个不错的旧答案的链接stackoverflow.com/a/3827424/12302982
  • 局部变量为final时重新赋值确实是非法的。但问题是b 没有被重新分配——它只是被分配了。 Here is an example 这表明使用单独的语句声明 final 变量并分配 它非常好。

标签: java switch-statement


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多