Vergelijkingstabel
Basis voor vergelijking | Boksen | unboxing |
---|---|---|
basis- | Objecttype verwijst naar het waardetype. | proces van het ophalen van waarde van het ingesloten object. |
opslagruimte | De waarde die op de stapel is opgeslagen, wordt gekopieerd naar het object dat in het heap-geheugen is opgeslagen. | De waarde van het object die in het heap-geheugen is opgeslagen, wordt gekopieerd naar het waardetype dat op de stapel is opgeslagen. |
conversie | Impliciete conversie. | Expliciete conversie. |
Voorbeeld | int n = 24; object ob = n; | int m = (int) ob; |
Definitie van Boksen
Boksen is een procedure voor het converteren van een waardetype naar een objecttype. Hier wordt het waardetype opgeslagen op de stapel en wordt het objecttype opgeslagen in het heap-geheugen. Deze omzetting van waardetype naar het objecttype is een impliciete conversie. U kunt een waarde direct aan een object toewijzen en C # zal de restconversie afhandelen. Laten we Boksen begrijpen met een voorbeeld.
int i = 24; object ob = i; // Zet integer type n in objecttype ob. of object ob1 = 21; // hier verwijst ook een objecttype ob1 naar een integer type
In bovenstaande code wordt de integer type i bevattende waarde 24 opgeslagen op de stapel en gekopieerd naar het objecttype ob. Een objecttype verwijst nu naar een geheel getal. Nu bevat de "int i" ook de waarde 24 en het "objecttype ob" bevat ook de waarde 24, maar beide waarden zijn onafhankelijk van elkaar, dwz als u de waarde van i wijzigt, zal deze de verandering in de waarde van ob.
Boksen verbruikt extra geheugen samen met extra tijd. De reden is dat een nieuw object, dat naar het waardetype verwijst, de geheugenruimte op de heap moet toewijzen. Vervolgens wordt de waarde van het waardetype dat op de stapel is opgeslagen overgedragen naar ob het objecttype op de opslaglocatie van de heap.
Definitie van Unboxing
Het omgekeerde van Boksen is Unboxing. Unboxing is een conversie van het objecttype naar het waardetype. In Unboxing wordt de waarde van het in dozen verpakte objecttype dat op de heap is opgeslagen overgedragen naar het waardetype dat op de stapel is opgeslagen. In tegenstelling tot Boxing, moet de Unboxing expliciet worden gedaan. Het objecttype wordt expliciet naar het waardetype gegoten en het waardetype moet hetzelfde zijn als de waarde waarnaar het objecttype verwijst. Laten we het concept van Unboxing begrijpen met een voorbeeld.
int i = 24; object ob = i; // Zet integer type n in objecttype ob. int j = (int) ob; // Ontbind de gehele getalwaarde die is opgeslagen in objecttype ob naar integer type y.
De waarde die is opgeslagen in het object ob wordt opgehaald door deze naar het type te gieten dat hetzelfde is als waarnaar het object verwijst, dus integertype "j".
Unboxing verbruikt ook meer geheugen en meer tijd. Aangezien een objecttype moet worden gedeblokkeerd, moet de waarde van het objecttype dat op de heap is opgeslagen, worden overgedragen naar het nieuwe waardetype dat op de stapel is opgeslagen. Het objecttype waarvan de waarde is opgehaald, is nu beschikbaar voor garbage collection.
Belangrijkste verschillen tussen Boksen en Unboxing
- In het boksen wordt een object gemaakt om te verwijzen als een waardetype. Aan de andere kant wordt het ophalen van de waarde uit het omkaderde object unboxing genoemd.
- Een waardetype dat op een stapel is opgeslagen, wordt gekopieerd naar het object dat in het heap-geheugen is opgeslagen. Anderzijds wordt bij het unboxen een object dat in het heap-geheugen is opgeslagen gekopieerd naar een waardetype dat in het stapelgeheugen is opgeslagen.
- Boksen is een impliciete conversie terwijl unboxing een expliciete conversie is.
Conclusie:
Zowel het boksen als het unboxen kost meer tijd en geheugen, en ze zijn rekenkundig duur. Ze missen ook de veiligheid van het type en verhogen de runtime-overhead. Het is altijd aangeraden om te veel gebruik van boksen en unboxing in het programma te voorkomen.