Почему в коллекциях не используются примитивные типы

В коллекциях Java и Kotlin нельзя напрямую использовать примитивные типы, такие как int, char или boolean, потому что коллекции работают с объектами. Основная причина в том, что коллекции в Java и Kotlin основаны на параметризации (generics), которая поддерживает только объектные типы. Примитивные типы, такие как int, не являются объектами, поэтому они не могут быть использованы в качестве параметров типов для коллекций.

Однако в Java и Kotlin есть обертки для примитивных типов, которые называются обертками или упакованными типами (wrapper classes). Например:

  • int имеет обертку Integer
  • char имеет обертку Character
  • boolean имеет обертку Boolean

Когда вы добавляете примитивные типы в коллекцию, компилятор автоматически преобразует их в соответствующие объекты оберток с помощью процесса, называемого автоупаковка (autoboxing). При извлечении значений из коллекции происходит обратный процесс, называемый автоматическое распаковывание (unboxing), где объекты оберток преобразуются обратно в примитивные типы.

List<Integer> list = new ArrayList<>();
list.add(5); // автоупаковка int в Integer
int value = list.get(0); // автоматическое распаковывание Integer в int