Összehasonlító táblázat
Az összehasonlítás alapja | dobozolás | Kicsomagolás |
---|---|---|
Alapvető | Az objektum típusa az értéktípusra vonatkozik. | az érték lekérése a dobozos objektumból. |
Tárolás | A veremben tárolt érték átmásolódik a halom memóriájában tárolt objektumra. | A halom memóriájában tárolt objektum értékét a veremben tárolt értékre másolja. |
Átalakítás | Implicit átalakítás. | Kifejezett konverzió. |
Példa | int n = 24; Ob = n objektum; | int m = (int) ob; |
A boksz meghatározása
Az ökölvívás az értéktípus egy objektumtípusra való átalakításának eljárása. Itt az értéktípus tárolódik a veremben, és az objektumtípus a halom memóriájában tárolódik. Az értéktípusnak az objektumtípusra való átalakítása implicit átalakítás. Az objektumhoz közvetlenül rendelhet értéket, és a C # kezelni fogja a többi konverziót. Tegyük meg a Boxing példáját.
int i = 24; Ob = i objektum; // Az n típusú egész számot az ob. vagy Ob1 = 21 objektum; // itt is egy Ob1 típusú objektum egész számra vonatkozik
A fenti kódban a 24-es értéket tartalmazó i. Típusú egész szám tárolódik a veremen, és az Ob. Egy objektumtípus most egész számra utal. Most az „int i” szintén tartalmaz 24 értéket, és az „Ob objektumtípus” is tartalmaz 24 értéket, de mindkét érték független egymástól, azaz ha megváltoztatod az i értéket, akkor ez nem fogja tükrözni a változást ob. értéke
Az ökölvívás többletmemóriát és extra időt igényel. Ennek az az oka, hogy egy új objektumnak, amely az értéktípusra utal, meg kell osztania a memóriát a kupacon. Ezután a veremben tárolt értéktípus értékét az objektumtípusra, a kupacmemória-helyre továbbítjuk.
Az Unboxing meghatározása
A boksz háttere az Unboxing. Az Unboxing az objektumtípus értéktípusra való átalakítása. Az Unboxing (Csomagolás eltávolítása) mezőben a halomban tárolt dobozos objektumtípus értékét a veremben tárolt értéktípusra helyezi át. A Boxingtól eltérően az Unboxing kifejezetten meg kell történnie. Az objektumtípust kifejezetten az értéktípusra osztják, és az értéktípusnak meg kell egyeznie az objektumtípus értékével. Lássuk meg az Unboxing fogalmát egy példával.
int i = 24; Ob = i objektum; // Az n típusú egész számot az ob. int j = (int) ob; // A Ob objektumtípusban tárolt egész szám értékét törölje az y egész számba.
Az ob objektumban tárolt értéket úgy kapja meg, hogy az objektumhoz hasonló típusú öntéssel, azaz „j” egész számra utal.
Az Unboxing több memóriát és több időt is fogyaszt. Mivel, amikor egy objektum típusát nem kell csomagolni, akkor a halomban tárolt objektumtípus értékét át kell vinni a veremben tárolt új értéktípusra. Az a objektumtípus, amelynek értékét a lekérdezték, most a szemétgyűjtésre lesz elérhető.
A Boxing és az Unboxing közötti különbségek
- Az ökölvívás során egy objektum értéktípusként jelenik meg. Másrészt az érték visszaállítása a dobozos objektumból az unboxing.
- A veremben tárolt értéktípus a halom memóriájában tárolt objektumra kerül. Másrészről az unboxolás során a halom memóriában tárolt objektumot a verem memóriában tárolt értéktípusra másolják.
- A boksz implicit átalakítás, míg az unboxing kifejezett konverzió.
Következtetés:
Mind az ökölvívás, mind az unboxing több időt és memóriát fogyaszt, és számítási szempontból drága. Hiányoznak a típusbiztonság, és növelik a futási időt. Mindig tanácsos elkerülni, hogy a programban a boksz és az unboxing túl sok legyen.