いいえ、Java列挙値は実際にはオブジェクトです。それらは、フィールド、メソッドなど、および値ごとにメソッドのさまざまな実装を持つことができます。ただし、それらの固定セットのみがあります。列挙型のインスタンスを自分で作成するのとは異なります。有効な値のセットは、型の初期化時に作成されます。膨大な数の列挙値がない限り、最適化について考える必要はほとんどありません。
列挙値のセットを論理的に検討するときはいつでも、簡単に達成できる最適化の1つのビットを使用することに注意してください。EnumSet
これは、基本的にセットを効率的に表すためにビットパターンを使用します。
(ここでは、C#はJavaよりもC ++に近いことに注意してください。C#列挙型は残念ながらオブジェクト指向ではありません。ため息をつきます。)
編集:列挙値は、ドキュメントに従って名前でシリアル化されます:
バージョン5.0の新機能である列挙型を処理するためのサポートがシリアル化に追加されました。enumインスタンスをシリアル化するためのルールは、「通常の」シリアル化可能なオブジェクトをシリアル化するためのルールとは異なります。enumインスタンスのシリアル化された形式は、そのenum定数名と、その基本enumタイプを識別する情報のみで構成されます。デシリアライズの動作も異なります。クラス情報を使用して適切な列挙型クラスが検索され、返される列挙型定数を取得するために、そのクラスと受信した定数名を使用してEnum.valueOfメソッドが呼び出されます。
ただし、実際に小さなシリアル化されたフォームを使用している場合は、Javaの組み込みのシリアル化を回避する必要があります。これは、比較的冗長です(また、バージョン管理の問題に非常に敏感です)。あらゆる種類の選択肢があります。私が最もよく知っているのはProtocolBuffersです。これは、列挙値を単なる整数としてシリアル化します。