final int a = 1;
final int b;
b = 2;
final int x = 0;
switch (x) {
case a:break; // ok
case b:break; // compiler error: Constant expression required
}
/* COMPILER RESULT:
constant expression required
case b:break;
^
1 error
*/
为什么会出现这种错误?如果我愿意final int b = 2
,一切都会正常。
b
可能尚未初始化,可以分配多个值。在您的示例中,它显然已初始化,但是编译器可能不知道(而且也不知道)。想像:
final int b;
if (something) {
b = 1;
} else {
b = 2;
}
编译器需要中的常量switch
,但的值b
取决于某些外部变量。
问题内容: 我熟悉Swift中的语句,但想知道如何用来替换这段代码: 问题答案: 这是一种方法。假设是或其他,则可以选择将操作数分配给新变量。这样,您就可以使用关键字来对其进行范围划分: 可以简化一下: 您还可以完全避免关键字与范围匹配:
有人能告诉我为什么switch语句不能识别字符串变量吗。告诉我
我有一个数组,它将被迭代,并取决于条件执行任务 我已经用if else完成了这个操作,并用switch,条件是如果(1&&2)(然后执行A)else if(1)(然后执行B)else if(2)(然后执行c)else if(none)(然后执行D) if else工作正常,但是需要对Switch语句进行哪些修正 对于ref=Javascript用数组或字符串切换大小写
我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在Java中是不可能的。 这里有一些伪代码,我只想用开关来实现。
问题内容: 我想知道是否有一种方法可以在java switch case语句中执行不区分大小写的匹配。默认实现 区分大小写 。请参见下面的示例。 因此,以上语句作为输出返回。而且我正在尝试使其像 不区分大小写的 匹配一样工作。我尝试将字符串文字都转换为小写,然后进行比较。但无法做到。 问题答案: 如果要这样做:只需确保输入数据全部为小写,并使用小写… 本地化问题 同样,古老的本地化问题再次引起人们
为什么Java中的Switch语句可以包含一个FINAL变量作为CASE?## 在我检查过的JDK7中,值不能重新分配给最终变量,如下所示。但是,为什么即使不能重新分配最终变量“x”的值,最终变量“x”也可以包含在Switch语句中? 为什么即使Oracle定义Java编译器将最终变量作为初始化的值而不是变量名,也可以这样做?http://docs.oracle.com/javase/specs/