首頁 >Java >java教程 >為什麼 Java 的 Switch 語句不接受看似常數的變數作為 case 標籤?

為什麼 Java 的 Switch 語句不接受看似常數的變數作為 case 標籤?

Linda Hamilton
Linda Hamilton原創
2024-12-10 15:44:10838瀏覽

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