Діаграма порівняння
Основа для порівняння | Бокс | Розпакування |
---|---|---|
Основний | Тип об'єкта відноситься до типу значення. | процес вилучення значення з об'єкту, що стоїть в коробці. |
Зберігання | Значення, що зберігається в стеку, копіюється до об'єкта, що зберігається в пам'яті купи. | Значення об'єкта, що зберігається в пам'яті купи, копіюється до типу значення, що зберігається в стеку. |
Перетворення | Неявне перетворення. | Явне перетворення. |
Приклад | int n = 24; об'єкт ob = n; | int m = (int) ob; |
Визначення боксу
Бокс - це процедура перетворення типу значення в тип об'єкта. Тут тип значення зберігається в стеку, і тип об'єкта зберігається в пам'яті купи. Це перетворення типу значення в тип об'єкта є неявним перетворенням. Ви можете безпосередньо призначити значення об'єкту, а C # оброблятиме остаточне перетворення. Давайте зрозуміємо Бокс з прикладом.
int i = 24; об'єкт ob = i; // Введіть ціле число n в тип об'єкта ob. або об'єкт ob1 = 21; // тут також об'єкт типу ob1 відноситься до цілочисельного типу
У наведеному вище коді ціле тип i, що містить значення 24, зберігається в стеку і копіюється до типу об'єкта ob. Тепер тип об'єкта посилається на ціле значення. Тепер "int i" також містить значення 24, а "об'єкт типу ob" також містить значення 24, але обидва значення не залежать один від одного, тобто якщо ви змінюєте значення i, воно не буде відображати зміну значення ob.
Бокс споживає додаткову пам'ять разом з додатковим часом. Причина полягає в тому, що новий об'єкт, який буде посилатися на тип значення, повинен виділити простір пам'яті на купі. Далі, значення типу значення, що зберігається в стеку, буде передано до типу об'єкта, на місці пам'яті купи.
Визначення розпакування
Зворотний бокс - це розпакування. Розпакування - це перетворення типу об'єкта у тип значення. У Unboxing значення кодового типу об'єкта, що зберігається в купі, передається типу значення, що зберігається в стеку. На відміну від Boxing, Unboxing має бути зроблено явно. Тип об'єкта явно передається до типу значення, а тип значення має бути таким же, як значення, на яке посилається тип об'єкта. Давайте зрозуміємо поняття Unboxing з прикладом.
int i = 24; об'єкт ob = i; // Введіть ціле число n в тип об'єкта ob. int j = (int) ob; // Розблокувати ціле значення, яке зберігається в об'єктному типі ob до цілого типу y.
Значення, що зберігається в об'єкті ob, витягується шляхом перенесення його на тип, аналогічний тому, що об'єкт мав на увазі тобто ціле тип "j".
Розпакування також споживає більше пам'яті та більше часу. Оскільки, коли тип об'єкта повинен бути розгорнутим, значення об'єктного типу, що зберігається в купі, повинно бути передане новому типу значення, що зберігається в стеку. Тип об'єкта, значення якого було отримано, тепер буде доступним для збору сміття.
Ключові відмінності між боксом і розпаковуванням
- У боксі об'єкт створюється для позначення типу значення. З іншого боку, процес вилучення значення назад з об'єкту в коробці називається unboxing.
- Тип значення, що зберігається в стеку, копіюється до об'єкта, що зберігається в пам'яті купи. З іншого боку, при розпакуванні об'єкт, що зберігається в пам'яті купи, копіюється до типу значення, що зберігається в пам'яті стека.
- Бокс є неявним перетворенням, тоді як розпакування є явним перетворенням.
Висновок:
І бокс, і розпакування споживають більше часу і пам'яті, і вони обчислювально дорогі. Вони також не мають безпеки типу і збільшують витрати на виконання. Завжди рекомендується уникати надмірного використання боксу та розпакування в програмі.