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.
0 comments
Post a comment