ArrayList
の型を宣言したいint
。
以下でエラーが発生するのはなぜですか。
ArrayList<int> list1 = new ArrayList<int>();
しかし、次の作品:
ArrayList<Integer> list1 = new ArrayList<Integer>();
?
ArrayList
型のみを参照でき、プリミティブは参照できません。Integer
プリミティブではなくクラスです。
を宣言すると、プリミティブではなく型を格納するArrayList<Integer> list1 = new ArrayList<Integer>()
が作成されます。ArrayList
Integer
int
プリミティブ型と参照型の違いについて知りたい場合は、http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.htmlをチェックしてください。
プリミティブ型int
なので。ジェネリック パラメーターとして使用できるのは、参照型のみです。
簡単に言うと、ジェネリックス(のようなArrayList<Integer>
)はプリミティブ型(int
)を受け入れず、オブジェクト(Integer
)のみを受け入れます。
これは、のようなクラスArrayList
がオブジェクトを使用して実装されているためです。すべてのクラスはObjectを継承するため、コンパイラは他のクラスをプラグインするだけで済みます。ただし、プリミティブ型(のようなint
)はクラスではないため、Objectから継承しません。そこで、Sun/OracleはInteger
これを支援するクラスを作成しました。
つまり、要するに:int
ではありませんObject
。
int はプリミティブ データ型ですが、Integer はクラスであるため、arrayList 配列はプリミティブ型ではなく参照型のみをパラメーターとして使用できます。
int
ですprimitive
。ではありませんObject
。
詳細については、このリンクを参照してください。