1. ホーム
  2. java

[解決済み] なぜswitch文のデータ型はlongにできないのか、Java?

2023-05-18 04:07:30

質問

以下は SunのJavaチュートリアル :

<ブロッククオート

スイッチが動作するのは byte , short , char そして int といったプリミティブなデータ型があります。また、列挙型(クラスと継承で説明)と、特定のプリミティブ型を "wrap"するいくつかの特別なクラスでも動作します。 Character , Byte , Short そして Integer (Simple Data Objectsで説明)。

を使用する正当な理由があるはずです。 long というプリミティブなデータ型が許されないのには、何か理由があるはずです。 誰かそれが何なのか知っていますか?

どのように解決するのですか?

おそらく、典型的なスイッチの使い方をもとに、ある程度は恣意的に決定されたのだと思います。

スイッチは基本的に 2 つの方法 (または原則的にその組み合わせ) で実装できます。少数のケース、または値が広く分散しているケースでは、スイッチは基本的に一時変数に対する一連の if と同等になります (スイッチが入る値は 1 回だけ評価される必要があります)。値が多かれ少なかれ連続している中規模のケースでは、スイッチ テーブル (Java の TABLESWITCH 命令) が使用され、ジャンプ先の位置が効果的にテーブルで検索されます。

これらの方法のどちらかは、原理的には整数ではなく長い値を使用することができます。本当に long 値を切り替える必要があるケースは、一連の IF ステートメントとして書き直すか、他の方法で回避することが許容できるほどまれです (問題の long 値が近くにある場合、Java コードで最も低い値を減算した int 値を切り替えることができます)。