ホームページ >Java >&#&チュートリアル >Java Switch ステートメントに Case ラベルの定数式が必要なのはなぜですか?

Java Switch ステートメントに Case ラベルの定数式が必要なのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-06 16:45:14183ブラウズ

Why Do Java Switch Statements Require Constant Expressions for Case Labels?

Java Switch ステートメント: 定数式の要件

Java で switch ステートメントを使用する場合、case ラベルは定数式である必要があります。これは、式がコンパイル時に既知である必要があることを意味します。指定されたコード:

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.BAZ、および Foo.BAM は定数式とみなされないため、case ラベルでコンパイラ エラーが発生します。これらはクラス内で定数として宣言されますが、特定の値で初期化されません。定数式には、リテラルやコンパイル時定数で初期化された最終変数など、コンパイル時に評価できる値が必要です。

この問題を解決するには、Foo.BAR 定数を次のように初期化できます。コンパイル時定数値:

public abstract class Foo {
    public static final int BAR = 1;
    public static final int BAZ = 2;
    public static final int BAM = 3;
}

これにより、case ラベルが定数として評価されるため、switch ステートメントが正常にコンパイルできるようになります。式.

または、定数を列挙型として宣言することもでき、よりクリーンなコードとより厳密に型指定された定数が可能になります。ただし、列挙型には、デフォルトのケースやケース ラベルとして特定の列挙値を必要とするなど、特定の制限があります。

以上がJava Switch ステートメントに Case ラベルの定数式が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。