Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Autoboxing in Java 5

2.553 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

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>

×