rle*_*827 4 java switch-statement
当我在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;
}
Run Code Online (Sandbox Code Playgroud)
数组没有任何常数.其内容可能随时发生变异.该基准会说一样的,但match[0]可能是一些在任何时间点不同.
你必须使用一个常数值; 一个保证不会改变的.像枚举,原始文字(和它们的盒装对应物)和String文字这样的东西保证不会通过这个过程改变,并且有效使用.
但是,这确实意味着您可以使用标记final且不可变的变量.由于数组类型是可变的,因此它也无法正常工作 - 即使您将其重新分配给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;
}
Run Code Online (Sandbox Code Playgroud)