• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのenumについて)

javaのenumについて

このQ&Aのポイント
  • 機械語コードにおいて、enumの内容はどのように置き換わるのか?
  • enumの内容は整数に置き換えるような記述はあるのか?
  • javaのenumについての解説

質問者が選んだベストアンサー

  • ベストアンサー
  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.2

>Q1) 機械語コードに於いては、ONE、TWO、THREEの内容はどの様に置き換わりますか? 機械語としては普通のクラスと差はない、と思います。 中間コード(classファイル)においてはswitch文は書き換えられます。 クラスを生成したりしますが、内容的にはenumの定義順をつかった整数比較に置き換えられます。(コンパイル環境によって左右されます) >Q2) ONE、TWO、THREEの内容は、整数に置き換えるような記述はありますか? 回答No.1の方がおっしゃられているようにordinalメソッドで定義順を返すメソッドがありますが、メソッドが使えるのはswitchの評価だけで、caseの部分は定数リテラルでなければいけない為、使用できません。 つまり switch (s.ordinal()) { case 0: CNT = 2000; break; default: CNT = 20000; break; } // public static final int ZERO = abc.ONE.ordinal(); ←これは定数リテラルにならない // case ZERO: ←コンパイルエラーになります 上記のように書く事を強いられます。これはかなりよろしくないコードになるために、コンパイル時に自動的にコードを生成するようにしているのでしょう。

その他の回答 (1)

noname#247307
noname#247307
回答No.1

enumは、プリミティブタイプではなくオブジェクトです。したがって、Java仮想マシンのバイトコードとしては、通常のクラスと同様の型式で記述されているはずです。 クラスのバイトコードは、マジックナンバー、マイナー/メジャーバージョン、定数プール、アクセスフラグ、etc,etc...と多数のデータによって構成されていますので、「バイトコードの値はいくつ」とは表現しにくいです。 「整数に置き換える方法」ですが、オブジェクトですから当然メソッドもありますので、メソッドを利用するのが一番でしょう。一般的には、順番を表すordinalメソッドを呼び出して利用するのが多いのではないかと。例えば、abc .ONT.ordinal()といった感じですね。

関連するQ&A