— Привет, Амиго!
Сегодня я расскажу про 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 друг-другу, об остальном позаботится компилятор.
— Это очень удобно.
— Ага. Но есть нюансы, о которых я расскажу дальше.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ