
— Привет, Амиго!
Сегодня я расскажу про autoboxing. Box – это коробка. Boxing – упаковка. А AutoBoxing – это соответственно – автоматическая упаковка.
Насколько ты помнишь, в Java есть как типы, унаследованные от класса Object, так и примитивные типы. Но, как оказалось, такая удобная вещь как коллекции и generic’и могут работать только с типами, унаследованными от Object.
Тогда было принято решение сделать не примитивный аналог каждого примитивного типа.
Примитивный тип | Не-примитивный аналог |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
void | Void |
Но каждый раз преобразовывать эти типы друг в друга оказалось не очень удобно:
int x = 3;
Integer y = new Integer(x+1);
int z = y.intValue();
Особенно, если работать сразу с коллекциями:
int[] numbers = new int[10];
ArrayList<Integer> list = new ArrayList<>();
for (int i : numbers) {
list.add(new Integer(i));
}
Поэтому разработчики Java придумали автоматическую «упаковку» (boxing) и «распаковку» (unboxing) примитивных типов в их непримитивные аналоги.
Вот как это работает:
Видимый код | Что происходит на самом деле |
---|---|
|
|
|
|
|
|
|
|
Все просто. Ты можешь присваивать типы int и Integer друг-другу, об остальном позаботится компилятор.
— Это очень удобно.
— Ага. Но есть нюансы, о которых я расскажу дальше.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ