Що таке упаковка і розпакування (boxing

Робота з об'єктами неминуче тягне за собою накладні витрати по пам'яті і швидкодії. Щоб уникнути цього, використовуються змінні примітивних типів. Це, по суті, прості змінні, як в C або С ++. byte займає 1 байт пам'яті, int і float - по 4 байта, long і double - по 8 байт і т. д. На відміну від операцій з об'єктами, операції зі змінними примітивних типів не вимагають виділення / звільнення пам'яті і виконуються швидко - вони в в більшості випадків в кінцевому рахунку компілюються в прості процесорні інструкції, що дозволяє програмам на Java часто працювати зі швидкістю, порівнянної з програмами, написаними на простих компільованих (безпосередньо в машинний код) мовами (типу тих же C, с ++).

Незручність з ними в тому, що з ними не можна робити те, що можна робити з усіма об'єктами - вони не мають методів (не можна, наприклад написати їх не можна поміщати в колекції та інше.

Для того, щоб обійти цю незручність, для всіх примітивних типів існують відповідні класи-оболонки, об'єкти яких можуть зберігати значення примітивних типів, але має всі властивості нормальних об'єктів:

Всі об'єкти-оболонки - незмінні (immutable) типи, т. Е. Коли ми присвоюємо їм нове значення, фактично на заміну раніше об'єкту створюється новий.

відповідь дан 28 Жовтня '16 о 13:47

У версіях нижче JDK 1.5 було нелегко перетворювати примітивні типи даних, такі як int, char, float, double в їх класи оболонки Integer, Character, Float, Double. Починаючи з версії JDK 5 ця функція, перетворення примітивних типів в еквівалентні об'єкти, реалізована автоматично. Це властивість відомо як Автоупаковка (Autoboxing). Зворотний процес відповідно - Розпакування (Unboxing) тобто процес перетворення об'єктів до відповідних їм примітивні типи.

Приклад коду для автоупаковкі і розпакування представлений нижче:

Коли використовується автоупаковка і розпакування?

Автоупаковка застосовується компілятором Java в наступних умовах:

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

відповідь дан 28 Жовтня '16 о 12:16