Autoboxing
valueOf() Um ein Wrapper-Objekt zu bekommen, nutzt man entweder den Konstruktor der Wrapper-Klasse oder  valueOf() . Während  valueOf(String)  schon immer existierte, ist  valueOf(int)  neu In Java 5. Integer in = new Integer( 23 ); Integer in = Integer.valueOf( 23 ); Der Unterschied: Die Fabrikfunktion baut nicht immer neue  Integer -Objekte aufgebaut. Zahlen zwischen -128 und +127 kommen aus einem Pool.
Boxing: Von Primitiv zum Wrapper Das Boxing verpackt ein primitives Element in ein Objekt der zugeordneten Wrapper-Klasse. Automatisch mit Boxing: Integer in = 23; Boxing  entspricht einer impliziten Typumwandlung eines primitiven Typs in ein Objekt der Wrapper-Klasse. Integer in = Integer.valueOf( 23 ); Wichtig zu verstehen ist, dass beim Boxing nicht der Konstruktor aufgerufen wird, sondern die Fabrikfunktion  valueOf() .
Wann Boxing? Boxing wird immer dann vorgenommen, wenn ein Wrapper-Objekt gebraucht wird, aber ein primitiver Wert gegeben ist: Wertzuweisung, Parameterübergabe, Ergebnisrückgabe, Array-Initialisierung Integer[] ia = new Integer[]{ 1, 2, 3 }; Falls der gegebene Typ nicht exakt zur erwarteten Wrapper-Klasse passt, wird kein Konvertierung vorgenommen: Integer in = 3; // ok Double  db = 3; // nö, Compilerfehler Double  db = (double) 3; // ok Trotzdem geht: Number pi = 3.1415;   //  pi  in Double, das ist  Number
Unboxing: Von Wrapper zum Primitiven Unter  Unboxing  versteht man das automatische Konvertieren eines Elementes der Wrapper-Klasse in den primitiver Typ. Beispiel mit explizitem Methodenaufruf (Annahme, die Variable  in  ist ein  Integer ): int i = in.intValue();   Mit Unboxing heißt es nur: int i = in; Der Compiler wird immer Unboxing versuchen, wenn ein Wrapper-Objekt verfügbar ist, aber ein primitiver Wert gebraucht wird: Integer in = 1; int  i  = 2 + in;
Autoboxing bei Boolean So wie auch bei arithmetischen Operationen Wrapper-Objekte ausgepackt werden, so ist das auch im Fall von  Boolean -Objekten und logischen Operatoren  ! ,  ||  und  && . Boolean case1  = true; Boolean case2  = true; boolean case3  = false; Boolean result = (case1 || case2) && case3;
Boxing/Unboxing beim Inkrement Das folgende Programmstück funktioniert: for ( Integer i = 1; i <= 10; i++ )   System.out.println( i ); Hier wird, obwohl  i  ein  Integer  ist, gültig  i++  ausgeführt. i++  wird zunächst ausgepackt, dann erhöht und wieder eingepackt. Der Compiler generiert: i = Integer.valueOf( i.intValue() + 1 ); Die Performance ist nicht optimal, und das ist das Problem. Viele Objekte werden nicht ganz offensichtlich erzeugt.

Autoboxing in Java 5

  • 1.
  • 2.
    valueOf() Um einWrapper-Objekt zu bekommen, nutzt man entweder den Konstruktor der Wrapper-Klasse oder valueOf() . Während valueOf(String) schon immer existierte, ist valueOf(int) neu In Java 5. Integer in = new Integer( 23 ); Integer in = Integer.valueOf( 23 ); Der Unterschied: Die Fabrikfunktion baut nicht immer neue Integer -Objekte aufgebaut. Zahlen zwischen -128 und +127 kommen aus einem Pool.
  • 3.
    Boxing: Von Primitivzum Wrapper Das Boxing verpackt ein primitives Element in ein Objekt der zugeordneten Wrapper-Klasse. Automatisch mit Boxing: Integer in = 23; Boxing entspricht einer impliziten Typumwandlung eines primitiven Typs in ein Objekt der Wrapper-Klasse. Integer in = Integer.valueOf( 23 ); Wichtig zu verstehen ist, dass beim Boxing nicht der Konstruktor aufgerufen wird, sondern die Fabrikfunktion valueOf() .
  • 4.
    Wann Boxing? Boxingwird immer dann vorgenommen, wenn ein Wrapper-Objekt gebraucht wird, aber ein primitiver Wert gegeben ist: Wertzuweisung, Parameterübergabe, Ergebnisrückgabe, Array-Initialisierung Integer[] ia = new Integer[]{ 1, 2, 3 }; Falls der gegebene Typ nicht exakt zur erwarteten Wrapper-Klasse passt, wird kein Konvertierung vorgenommen: Integer in = 3; // ok Double db = 3; // nö, Compilerfehler Double db = (double) 3; // ok Trotzdem geht: Number pi = 3.1415; // pi in Double, das ist Number
  • 5.
    Unboxing: Von Wrapperzum Primitiven Unter Unboxing versteht man das automatische Konvertieren eines Elementes der Wrapper-Klasse in den primitiver Typ. Beispiel mit explizitem Methodenaufruf (Annahme, die Variable in ist ein Integer ): int i = in.intValue(); Mit Unboxing heißt es nur: int i = in; Der Compiler wird immer Unboxing versuchen, wenn ein Wrapper-Objekt verfügbar ist, aber ein primitiver Wert gebraucht wird: Integer in = 1; int i = 2 + in;
  • 6.
    Autoboxing bei BooleanSo wie auch bei arithmetischen Operationen Wrapper-Objekte ausgepackt werden, so ist das auch im Fall von Boolean -Objekten und logischen Operatoren ! , || und && . Boolean case1 = true; Boolean case2 = true; boolean case3 = false; Boolean result = (case1 || case2) && case3;
  • 7.
    Boxing/Unboxing beim InkrementDas folgende Programmstück funktioniert: for ( Integer i = 1; i <= 10; i++ ) System.out.println( i ); Hier wird, obwohl i ein Integer ist, gültig i++ ausgeführt. i++ wird zunächst ausgepackt, dann erhöht und wieder eingepackt. Der Compiler generiert: i = Integer.valueOf( i.intValue() + 1 ); Die Performance ist nicht optimal, und das ist das Problem. Viele Objekte werden nicht ganz offensichtlich erzeugt.

Hinweis der Redaktion