Java 1.5 introduceerde een speciale functie van automatische conversie van primitieve typen naar de overeenkomstige Wrapper-klasse en vice versa.
Autoboxing : automatische conversie van primitieve typen naar het object van hun overeenkomstige wrapper-klassen staat bekend als autoboxing. Bijvoorbeeld - conversie van int naar integer, >
Unboxing: Het is gewoon het omgekeerde proces van autoboxing. Het automatisch omzetten van een object van een wrapper-klasse naar het bijbehorende primitieve type staat bekend als unboxing. Bijvoorbeeld - conversie van geheel getal naar int, >
Primitieve type Wrapper-klasse Boolean Boolean byte Byte char karakter zweven zweven int Integer >Wanneer vindt autoboxing en unboxing plaats in Java
autoboxing
: Laten we enkele gevallen met voorbeelden bekijken, waar autoboxing gebeurt.
Geval 1 : Wanneer een methode een wrapper-klasseobject verwacht, maar de waarde die als parameter wordt doorgegeven, een primitief type is. In de onderstaande code bijvoorbeeld, verwacht de methodemyMethod()
een object van de klasse Integer wrapper, maar we hebben een primitief type int doorgegeven. Het programma liep goed, aangezien compiler de autoboxing uitvoert (conversie van int naar integer)class AutoboxingExample1 {public static void myMethod (geheel getal) { System.out.println (num);}public static void main (String [] args) {/ * geslaagd voor int (primitief type), zou het zijn * geconverteerd naar Integer-object tijdens Runtime * /myMethod (2);} }Output:
2Geval 2 : Wanneer u op een bepaald moment een waarde van het primitieve type toewijst aan een object van de wrapper-klasse. Bijvoorbeeld: De onderstaande instructies zijn geldig omdat de compiler tijdens runtime autoboxing uitvoert.
Geheel getal = 3; // Int toewijzen aan Integer: Autoboxing >Geval 3 : Bij het omgaan met collectiekaderklassen:
ArrayList <Integer> arrayList = new ArrayList <Integer> (); arrayList.add (11); // Autoboxing - int primitief voor Integer arrayList.add (22); // autoboxingHier verwacht de ArrayList-klasse een Integer-wrapper-klasseobject, maar we bieden int primitief.
unboxing
Geval 1 : methode verwacht object Integer (parameter) maar we hebben int. Auotmatische conversie (unboxing) gebeurde waarbij Integer in int werd omgezet.
klasse UnboxingExample1 {public static void myMethod (int num) { System.out.println (num);}public static void main (String [] args) { Geheel getal inum = nieuw geheel getal (100); / * geslaagd voor Integer wrapper class-object, it * zou worden omgezet in int primitief type * tijdens runtime * / myMethod (inum); } }Output:
100Geval 2 : opdrachten
Geheel getal inum = nieuw geheel getal (5); int num = inum; // object uitpakken naar primitieve conversieGeval 3 : Tijdens het behandelen van collectieklassen:
ArrayList arrayList = new ArrayList () int num = arrayList.get (0); // unboxing omdat de get-methode een Integer-object retourneertWat gebeurt er achter de schermen?
In de bovenstaande sectie hebben we geleerd hoe java compiler automatische conversie uitvoert tussen primitief type en bijbehorende Wrapper-objecten. Laten we bespreken wat compiler eigenlijk doet tijdens autoboxing en unboxing. De beste manier om dit te begrijpen, is door dingen te vergelijken voor java 1.5 en na java 1.5 (boksen en unboxing geïntroduceerd in java 1.5).
Autoboxing :
Wat we zien:Geheel getal = 100;Wat compiler doet (of wat we deden vóór Java 1.5):
Integer number = Integer.valueOf (100);Uitpakken :
Wat we zien:Geheel getal num2 = nieuw geheel getal (50); int inum = num2;Wat compiler doet:
Geheel getal num2 = nieuw geheel getal (50); int inum = num2.intValue ();Soortgelijke dingen gebeuren met de andere wrapper-klassen en primitieve typen zoals >
Weinig dingen waar u op moet letten:
Meng geen primitieven en objecten terwijl u vergelijkingen uitvoert. Mogelijk krijgt u onvoorspelbare resultaten voor dergelijke vergelijkingen. Beter is om te doen: object vergelijken met objecten (met de methode equals ()) en primitief vergelijken met primitieven (met logische operatoren zoals "==", "<" enz.).
Referentie
Hoe krijg ik een pdf van het beginboek. Dank je