首页 >Java >java教程 >为什么 Java 的 Switch 语句不接受看似常量的变量作为 case 标签?

为什么 Java 的 Switch 语句不接受看似常量的变量作为 case 标签?

Linda Hamilton
Linda Hamilton原创
2024-12-10 15:44:10829浏览

Why Doesn't Java's Switch Statement Accept Seemingly Constant Variables as Case Labels?

Java Switch 语句常量表达式混乱

在 Java 中,switch 语句需要常量表达式作为 case 标签。然而,即使使用看似常量的变量,开发人员也经常会遇到抱怨非常量表达式的错误。

考虑以下示例:

public abstract class Foo {
    public static final int BAR;
    public static final int BAZ;
    public static final int BAM;

    public static String lookup(int constant) {
        switch (constant) {
            case Foo.BAR: return "bar";
            case Foo.BAZ: return "baz";
            case Foo.BAM: return "bam";
            default: return "unknown";
        }
    }
}

编译此代码时,您可能会遇到“常量”每个案例标签上都出现“需要表达式”错误。

为什么不是 Foo.BAR 变量常量?

虽然 Foo.BAR 变量从执行角度来看实际上是常量,但它们不是 Java 语言规范 (JLS) 所要求的“编译时常量”。 JLS 第 15.28 节将常量表达式定义为:

  • 引用原始类型或字符串
  • 仅使用文字、常量变量和括号
  • 排除赋值运算符、 、 -- 和 instanceof
  • 不包括除原始类型之外的类型转换或String

在上面的示例中,Foo.BAR 变量没有使用显式初始化器声明,因此它们不符合编译时常量的条件。

解决方案:

要解决该错误,请使用编译时常量初始化 Foo.BAR 变量表达方式:

public static final int BAR = 1;
public static final int BAZ = 2;
public static final int BAM = 3;

以上是为什么 Java 的 Switch 语句不接受看似常量的变量作为 case 标签?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn