Autoboxing
valueOf() <ul><li>Um ein Wrapper-Objekt zu bekommen, nutzt man entweder </li></ul><ul><ul><li>den Konstruktor der Wrapper-...
Boxing: Von Primitiv zum Wrapper <ul><li>Das Boxing verpackt ein primitives Element in ein Objekt der zugeordneten Wrapper...
Wann Boxing? <ul><li>Boxing wird immer dann vorgenommen, wenn ein Wrapper-Objekt gebraucht wird, aber ein primitiver Wert ...
Unboxing: Von Wrapper zum Primitiven <ul><li>Unter  Unboxing  versteht man das automatische Konvertieren eines Elementes d...
Autoboxing bei Boolean <ul><li>So wie auch bei arithmetischen Operationen Wrapper-Objekte ausgepackt werden, so ist das au...
Boxing/Unboxing beim Inkrement <ul><li>Das folgende Programmstück funktioniert: </li></ul><ul><li>for ( Integer i = 1; i <...
Nächste SlideShare
Wird geladen in …5
×

Autoboxing in Java 5

2.479 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
2.479
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
240
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • #toc2
  • Autoboxing in Java 5

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

    ×