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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |