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