— Привіт, Аміго!
Сьогодні я розповім про autoboxing. Box – це коробка. Boxing - упаковка. А AutoBoxing – це відповідно – автоматична упаковка.
Наскільки ти пам'ятаєш, Java має як типи, успадковані від класу Object, так і примітивні типи. Але, як виявилося, така зручна річ як колекції та generic'и можуть працювати лише з типами, успадкованими від Object.
Тоді було прийнято рішення зробити не примітивний аналог кожного примітивного типу.
Примітивний тип | Не-примітивний аналог |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Карактор |
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 один одному, про інше подбає компілятор.
— Це дуже зручно.
— Ага. Але є нюанси, про які я розповім далі.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ