29. Соб. І Что такое autoboxing? Зачем используется autoboxing? Альтернативы autoboxing? Типы-обертки для примитивных типов mutable или immutable?

 

1.                Що таке autoboxing?

Autoboxing – упакування –  виконуване Java-компілятором автоматичне перетворення значень примітивних типів у об’єкти відповідних їм класів-обгорток. Наприклад, перетворення int на Integer, double на Double тощо. І навпаки, перетворення об’єктів у значення відповідних примітивних типів називається boxing – розпакування.

Компілятор Java застосовує авто упаковку коли значення примітивного типу передається як параметр методу, який очікує об’єкт відповідного класу-обгортки або присвоюється змінній відповідного класу-обгортки.

Найпростіший приклад автобоксингу: Character ch = 'a';

 

2.                 Для чого використовується autoboxing?

Для синхронізації, серіалізації, роботою з колекціями та дженериками використовуємо об’єкти,  а не примітивні типи. Аutoboxing позбавляє зайвої роботи з перетворення  «вручну» примітивів у обгортки,  автоматизуючи цей процес (і, відповідно, код стає чистіший, більш гнучкий та легший для читання).

 

3.                 Альтернативи autoboxing?

Аutoboxing є кращим з точки зору читабельності, але для безпечніших перетворень краще використовувати статичний фабричний метод valueOf(). Н-д: intList.remove(Integer.valueOf(347)).

 

4.  Типи-обгортки для примітивних типів mutable или immutable?

Типи-обгортки є immutable. Незмінність надає їм такі переваги над примітивами:

- автоматична синхронізація. Незмінні об’єкти автоматично захищені потоками, що дозволяє уникнути накладних витрат, спричинених використанням синхронізації.

- після створення стан незмінного об’єкта класу-обгортки не можна змінити, тому немає можливості перевести їх у неузгоджений стан.

- посилання на незмінні об’єкти можна багаторазово використовувати або кешувати без необхідності копіювати або клонувати їх, оскільки їх стан не можна змінити після створення.

Коментарі

Популярні дописи з цього блогу

27 Гугл 1 goto. Зарезервовані (ключові) слова. wait не в блоці synchronized. happens-before. BlockingQueue. Методи BlockingQueue

28. Соб 1. Какие приоритеты нитей бывают? Можно ли остановить нить, снизив ее приоритет до 0? Зачем нужен класс ThreadGroup? В какой группе нитей состоит main-thread? Что такое паттерн ThreadPool?

27. Соб.2 Что происходит после вызова метода notifyAll? Какие выгоды получает объект, если он immutable? Что такое «thread-safe»? Что такое «happens-before»? Что такое JMM? Какое исключение вылетит, если вызвать wait не в блоке synchronized?