ホームページ >Java >&#&チュートリアル >Java の「switch」ステートメントではコンパイル時以外の定数を使用できないのはなぜですか?

Java の「switch」ステートメントではコンパイル時以外の定数を使用できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-11 20:04:15950ブラウズ

Why Can't Java's `switch` Statement Use Non-Compile-Time Constants?

Java switch ステートメント: 定数式の要件について理解

Java では、switch ステートメントには case ラベルの定数式が必要です。 Foo.BAR のような定数は定数のように見えますが、Java 言語仕様 (JLS) で定義されているコンパイル時定数とはみなされません。 JLS §15.28 によれば、定数式はコンパイル時に既知である必要があります。

Foo.BA_ がコンパイル時の定数ではない理由:

にもかかわらず Foo.BA_変数はフィールドの初期化後は事実上定数ですが、コンパイル時の定数初期化子がありません。コンパイル時定数を作成するには、定数式を使用して変数を明示的に初期化します。例:

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

Switch ステートメントの代替:

int 定数の代わりに enum の使用を検討してください。ただし、enum には、switch ステートメントがすべての enum 値をカバーする場合でもデフォルトのケースが必要になるなど、追加の制約が課されます。さらに、case ラベルは、列挙値に評価される式ではなく、明示的な列挙値である必要があります。

Switch ステートメントの定数式に関する制限:

switch ステートメントで使用される定数式には、特定の制限:

  • プリミティブ型と String のみが使用可能です。許可されます。
  • プライマリは、リテラル、定数変数、および定数式を囲むかっこに制限されます。
  • 演算子は、代入演算子、-、-、またはinstanceofを除いて許可されます。
  • 型キャストはプリミティブ型または String に対してのみ許可されます。

要約すると、switch を使用する場合Java のステートメントでは、case ラベルの式がコンパイル時の定数であることを確認してください。代替手段として列挙型を検討してください。ただし、列挙型固有の制限事項に注意してください。これらの要件を理解すると、コードの信頼性と明確さが向上します。

以上がJava の「switch」ステートメントではコンパイル時以外の定数を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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