加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么最终变量不能在switch语句中使用?

发布时间:2020-12-15 04:36:32 所属栏目:Java 来源:网络整理
导读:当我在 Eclipse中键入以下代码时,它抱怨“case表达式必须是常量表达式”.如果数组标记为final,则其内容必须是常量.为什么这个无效? final String[] match={"a","b","c"};switch (switchVar) {case match[0]: /* Eclipse complains here about nonconstant s
当我在 Eclipse中键入以下代码时,它抱怨“case表达式必须是常量表达式”.如果数组标记为final,则其内容必须是常量.为什么这个无效?

final String[] match={"a","b","c"};
switch (switchVar) {
case match[0]: /* Eclipse complains here about nonconstant switch */
    System.out.println("Matches");
    break;
default:
    System.out.println("No Match");
    break;
}

解决方法

数组没有任何常数.其内容可能随时发生变异.引用会说同样的,但匹配[0]在任何时间点都可能是不同的.

你必须使用一个常数值;一个保证不会改变的.枚举,原始文字(及其盒装对应物)和字符串文字等内容保证不会在此过程中发生变化,并且可以使用.

但是,这确实意味着您可以使用标记为final且不可变的变量.由于数组类型是可变的,因此它也无法正常工作 – 即使您将其重新分配给最终变量也是如此.你必须声明文字.

下面是一个简单的代码片段,修改现有代码:

String switchVar = "a";
final String matchZero = "a";
switch (switchVar) {
    case matchZero: // valid since there's no way matchZero can ever be mutated
        System.out.println("Matches");
        break;
    default:
        System.out.println("No Match");
        break;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读