ArrayListの型を宣言したいint。
以下でエラーが発生するのはなぜですか。
ArrayList<int> list1 = new ArrayList<int>();
しかし、次の作品:
ArrayList<Integer> list1 = new ArrayList<Integer>();
?
ArrayList型のみを参照でき、プリミティブは参照できません。Integerプリミティブではなくクラスです。
を宣言すると、プリミティブではなく型を格納するArrayList<Integer> list1 = new ArrayList<Integer>()が作成されます。ArrayListIntegerint
プリミティブ型と参照型の違いについて知りたい場合は、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。
詳細については、このリンクを参照してください。