Tablica usporedbe
Osnova za usporedbu | Boks | Raspakirati |
---|---|---|
Osnovni, temeljni | Tip objekta odnosi se na vrstu vrijednosti. | postupak dohvaćanja vrijednosti iz predmeta uokvirenog predmeta. |
skladištenje | Vrijednost pohranjena na snopu kopira se na objekt pohranjen u memoriji hrpe. | Vrijednost objekta pohranjena u memoriji hrpe kopira se u tip vrijednosti pohranjene na stog. |
Konverzija | Implicitna konverzija. | Eksplicitna pretvorba. |
Primjer | int n = 24; objekt ob = n; | int m = (int) ob; |
Definicija boksa
Boks je postupak pretvaranja tipa vrijednosti u tip objekta. Ovdje je vrijednost tipa pohranjena u stog, a tip objekta je pohranjen u memoriji hrpe. Ova pretvorba tipa vrijednosti u tip objekta je implicitna konverzija. Možete izravno dodijeliti vrijednost objektu, a C # obradit će ostatak pretvorbe. Razmotrimo Boxing s primjerom.
int i = 24; objekt ob = i; // Paket cjelobrojnog tipa n u tip objekta ob. ili objekt ob1 = 21; // ovdje također objekt tip ob1 odnosi se na cijeli broj
U gornjem kodu, cjelobrojni tip i koji sadrži vrijednost 24 pohranjuje se na stog i kopira se u tip objekta ob. Tip objekta sada se odnosi na cijeli broj. Sada, "int i" također sadrži vrijednost 24 i "tip objekta ob" također sadrži vrijednost 24, ali obje su vrijednosti neovisne jedna o drugoj, tj. Ako promijenite vrijednost i, to neće odražavati promjenu u vrijednost ob.
Boks troši više memorije zajedno s dodatnim vremenom. Razlog tome je što novi objekt, koji će se odnositi na vrstu vrijednosti, mora dodijeliti memorijski prostor na hrpi. Zatim, vrijednost tipa vrijednosti koja je pohranjena u stog će se prenijeti u objektni tip, na mjesto memorije hrpe.
Definicija unboxinga
Poleđina Boxinga je Unboxing. Unboxing je pretvorba tipa objekta u tip vrijednosti. U Unboxing-u, vrijednost boksiranog tipa objekta pohranjenog u hrpi prenosi se na tip vrijednosti koji je pohranjen u stog. Za razliku od Boxinga, Unboxing se mora izvesti eksplicitno. Tip objekta eksplicitno je preusmjeren na tip vrijednosti, a tip vrijednosti mora biti isti kao i vrijednost na koju se odnosi tip objekta. Razmotrimo koncept Unboxinga s primjerom.
int i = 24; objekt ob = i; // Paket cjelobrojnog tipa n u tip objekta ob. int j = (int) ob; / / Unbox cjelobrojne vrijednosti pohranjene u tipu objekta ob do integer tipa y.
Vrijednost pohranjena u objektu ob je dohvaćena bacajući je na tip koji je isti kao objekt koji se odnosi na tj. Cijeli broj tipa “j”.
Unboxing također troši više memorije i više vremena. Budući da, kada tip objekta mora biti uklonjen iz spremnika, vrijednost tipa objekta pohranjenog u hrpi mora biti prenesena u novi tip vrijednosti pohranjen u stogu. Vrsta objekta čija je vrijednost preuzeta sada će biti dostupna za prikupljanje smeća.
Ključne razlike između Boxinga i Unboxinga
- U boksu, objekt se označava kao vrijednost tipa. S druge strane, proces vraćanja vrijednosti iz spremljenog predmeta naziva se unboxing.
- Tip vrijednosti pohranjen na stog kopira se u objekt pohranjen u memoriji hrpe. S druge strane, kod unboxinga, objekt pohranjen u memoriji hrpe kopira se u tip vrijednosti pohranjen u memoriji stog.
- Boks je implicitna konverzija dok je unboxing eksplicitna konverzija.
Zaključak:
I boks i unboxing troše više vremena i memorije, a računski su skupi. Također im nedostaje sigurnost tipa i povećava opterećenje u vrijeme izvođenja. Uvijek se savjetuje da izbjegavate previše korištenja boksa i unboxinga u programu.