Почему у меня не может быть int в типе ArrayList?
Я хочу объявить ArrayList типа integer.
Почему следующее сообщение вызывает ошибку:
ArrayList<int> list1 = new ArrayList<int>();
Но следующие работы:
ArrayList<Integer> list1 = new ArrayList<Integer>();
Ответы
Ответ 1
ArrayList
могут ссылаться только на типы, а не на примитивы. Integer
- это класс, а не примитив.
Когда вы объявляете ArrayList<Integer> list1 = new ArrayList<Integer>()
, вы создаете ArrayList
, который будет хранить тип Integer
, а не примитив int
.
Если вы хотите прочитать о различии между примитивными и ссылочными типами, посмотрите http://pages.cs.wisc.edu/~hasti/cs302/examples/primitiveVsRef.html
Ответ 2
Потому что int
является примитивным типом. В качестве общих параметров могут использоваться только ссылочные типы.
Ответ 3
Короткий ответ заключается в том, что generics (например, ArrayList<Integer>
) не принимают примитивные типы (int
), только объекты (Integer
).
Это связано с тем, что такие классы, как ArrayList
, реализуются с использованием объектов. Поскольку каждый класс наследуется от Object, компилятор может просто подключать другие классы. Но примитивные типы (например, int
) не наследуются от Object, поскольку они не являются классами. Таким образом, Sun/Oracle разработали класс Integer
, чтобы помочь с этим.
Итак, короче: int
не является Object
.
Ответ 4
int
является primitive
. Это не Object
.
Подробнее см. ссылку .
Ответ 5
int является примитивным типом данных, но Integer является классом, поэтому массив arrayList может принимать только ссылочные типы, поскольку его параметр не примитивный тип