Відповіді на питання до співбесіди level29

Відповіді на питання до співбесіди Level29

1 Що таке autoboxing?
Автоупаковка це механізм неявній ініціалізації об'єктів класів-обгорток (Byte, Short, Character, Integer, Long, Float, Double) значеннями відповідних їм вихідних примітивних типів (соотв. Byte, short, char, int, long, float, double), без явного використання конструктора класу.
Автоупаковка відбувається при прямому присвоєння примітиву - класу-обгортці (за допомогою оператора "="), або при передачі примітиву в параметри методу (типу «класу-обгортки»). Автоупаковке в «класи-обгортки» можуть бути піддані як змінні примітивних типів, так і константи часу компіляції (літерали і final-примітиви). При цьому літерали повинні бути синтаксично коректними для ініціалізації змінної вихідного примітивного типу.

Автоупаковка змінних примітивних типів вимагає точної відповідності типу вихідного примітиву - типу «класу-обгортки».
Наприклад, спроба автоупаковать змінну типу byte в Short, без попереднього явного приведення byte-> short викличе помилку компіляції.

Автоупаковка констант примітивних типів допускає більш широкі межі відповідності. В цьому випадку компілятор здатний попередньо здійснювати неявне розширення / звуження типу примітивів. Перетворення відбувається в два етапи:
1) неявне розширення (звуження) вихідного типу примітиву до типу примітиву відповідного класу-обгортці (для перетворення int-> Byte, спочатку компілятор неявно звужує int в byte)
2) автоупаковку примітиву в соотвествующий «клас-обгортку» (компілятор автоупаковивает byte-> Byte). проте в цьому випадку існують два додаткових обмеження:
a) присвоєння примітиву - «обгортці» може проводиться тільки оператором "=" (не можна передати такий примітив в параметри методу, без явного приведення типів)
b) тип лівого операнда не повинен бути старше ніж Character, тип права не дожен старше ніж int, (допустимо розширення / звуження byte <-> short, byte <-> char, short <-> char
і тільки звуження byte <— int, short <— int, char <— int, все остальные варианты требуют явного приведения типов)

Схожі статті