Sammenligningstabel
Grunnlag for sammenligning | Boksing | unboxing |
---|---|---|
grunn~~POS=TRUNC | Objekttype refererer til verdien typen. | prosess for å hente verdi fra det boksede objektet. |
Oppbevaring | Verdien som er lagret på stakken, kopieres til objektet som er lagret på heapminne. | Objektets verdi lagret på heapminnet kopieres til verdien typen lagret på stakken. |
Omdannelse | Implisitt konvertering. | Eksplisitt konvertering. |
Eksempel | int n = 24; objekt ob = n; | int m = (int) ob; |
Definisjon av boksing
Boksing er en prosedyre for å konvertere en verditype til en objekttype. Her lagres verdienstypen på stakken, og gjenstandstypen lagres i heapminne. Denne konverteringen av verdi type til objekttypen er en implisitt konvertering. Du kan direkte tilordne en verdi til en gjenstand, og C # vil håndtere resten konvertering. La oss forstå boksing med et eksempel.
int i = 24; objekt ob = i; // Boksen heltall typen n til objekttype ob. eller objekt ob1 = 21; // her henviser også en objekttype ob1 til en heltalltype
I overkoden lagres heltall type I som inneholder verdi 24 på stakken og kopieres til objekttypen ob. En objekttype refererer nå til et heltall. Nå inneholder "int i" også verdi 24 og "objekttype ob" inneholder også verdi 24, men begge verdiene er uavhengige av hverandre, dvs. hvis du endrer verdien av jeg, vil den ikke gjenspeile endringen i verdi av ob.
Boksing forbruker ekstra minne sammen med ekstra tid. Årsaken er at et nytt objekt, som vil referere til verdienstypen, må allokere minneplassen på bunken. Deretter blir verdien av verdiktypen som er lagret på stakken, overført til ob-objekttypen, på heapminneposisjonen.
Definisjon av Unboxing
Den omvendte boksen er Unboxing. Unboxing er en konvertering av objekttype til verdittypen. I Unboxing overføres verdien av boksobjekttype lagret på bunken til verdittypen som er lagret på stakken. I motsetning til boksing, må Unboxing gjøres eksplisitt. Objekttypen er eksplisitt gjengitt til verditypen, og verdienstypen må være den samme som verdien objekttypen refererer til. La oss forstå konseptet Unboxing med et eksempel.
int i = 24; objekt ob = i; // Boksen heltall typen n til objekttype ob. int j = (int) ob; // Unbox integerverdien lagret i objekttype ob til heltalltype y.
Verdien lagret i objektet ob hentes ved å kaste den til typen samme som objektet refererte til dvs. heltalltype "j".
Unboxing bruker også mer minne og mer tid. Siden når en objekttype må unboxes, må verdien av objekttype lagret på bunken overføres til den nye verditypen som er lagret på stakken. Objekttypen, hvis verdi som er hentet, vil nå være tilgjengelig for søppelsamling.
Viktige forskjeller mellom boksing og unboxing
- I boksing er det laget en gjenstand som refererer som en verditype. På den annen side kalles prosessen med å hente verdien tilbake fra det boksede objektet unboxing.
- En verditype som er lagret på en stabel, kopieres til objektet som er lagret på heapminne. På den annen side, i unboxing, kopieres et objekt lagret på heapminne til en verdi type lagret på stakkhukommelse.
- Boksing er en implisitt konvertering, mens unboxing er en eksplisitt konvertering.
Konklusjon:
Både boksing og unboxing spiser mer tid og minne, og de er beregnende dyrt. De mangler også type sikkerhet og øker runtime overhead. Det anbefales alltid å unngå for mye bruk av boksing og unboxing i programmet.