gpt4 book ai didi

java - 为什么 final 变量不能用在 switch 语句中?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:22:29 24 4
gpt4 key购买 nike

当我在 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;
}

最佳答案

数组没有什么是不变的。它的内容可能随时发生变化。 reference 会说同样的话,但 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;
}

关于java - 为什么 final 变量不能用在 switch 语句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40337276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com