0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Java】Enumのインスタンス化

Last updated at Posted at 2023-11-12

Enumのインスタンス化は列挙子単位

Enumのインスタンス化はクラス単位ではなく、列挙子単位で行われる。

次のような列挙子(A, B, C)を持つEnumを使用すると、「A, B, C」3つのSample型のインスタンスが生成される。

public enum Sample {
    A, B, C
}

具体的には、以下のようにSample.Aを呼び出すことで、「A, B, C」3つのインスタンスが生成される。

public class Main {
    public static void main(String[] args) {
    	Sample sample = Sample.A;
	}
}

呼び出しているのはSample.Aのみだが、Sample型のインスタンスとして生成されるのはEnumに定義されている全ての列挙子(A, B, C)となる。

Enumのインスタンスが生成されるのは1回だけ

列挙子を使用するタイミングで毎回インスタンスが生成される場合、次のコードの結果は「false」になるはずだが、実際には「true」が返ってくる。

public class Main {
	public static void main(String[] args) {
		sample(Sample.A); // ここでインスタンスが生成される
	}
	private static void sample(Sample sample) {
		System.out.println(Sample.A == sample); // ここではインスタンスが生成されない
	}
}

独自に定義したEnumをコンパイルすると、コンパイラによって自動的に追加されるstatic初期化子の中で各列挙子のインスタンスが生成され、staticフィールドに代入されるらしい。

参考

徹底攻略Java SE 11 Gold問題集[1Z0-816]対応 p.57

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?