当前位置: 首页 > 面试题库 >

switch语句中的最终变量大小写

贡正诚
2023-03-14
问题内容
        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/