Trotz der Einführung von Boxing und Unboxing in Java 5 verwenden Entwickler weiterhin primitive Typen in ihrem Code. Dies mag angesichts des zusätzlichen Komforts, den Boxed Types bieten, kontraintuitiv erscheinen, aber die Verwendung von Grundelementen bietet mehrere handfeste Vorteile.
Überlegungen zur Leistung
Joshua Blochs „Effective Java“-Highlights die potenziellen Auswirkungen auf die Leistung der Verwendung von „Long“ anstelle von „long“ in einer einfachen Berechnung. Beim Boxing- und Unboxing-Vorgang werden Objekte zugewiesen und freigegeben, was die Codeausführung verlangsamen kann. Wie im bereitgestellten Beispiel gezeigt, kann die Verwendung primitiver Typen die Laufzeit erheblich verkürzen.
Wertgleichheit
Ein weiterer Vorteil primitiver Typen ist ihre native Vorstellung von Wertgleichheit. Der Operator == vergleicht die Werte direkt, während die Methode .equals() für Boxed-Typen zusätzliche Schritte und Mehraufwand erfordert. Dies kann zu präziserem und effizienterem Code führen, insbesondere in leistungskritischen Szenarien.
Caching-Auswirkungen
In Java werden kleine Ganzzahlwerte ([-128; 127] ) werden von der JVM zwischengespeichert. Dies bedeutet, dass für diese Werte genau dasselbe Objekt zurückgegeben wird, was die Leistung im Vergleich zur Verwendung von Boxed-Typen verbessern kann. Für Werte außerhalb dieses Bereichs werden jedoch neue Objekte erstellt, was möglicherweise zu unnötigem Objektaufwand führt.
Beispiel: Das „Biziclop“-Puzzle
Das Verhalten von .equals( ) für geschachtelte ganze Zahlen kann verwirrend sein. Betrachten Sie den folgenden Code:
class Biziclop { public static void main(String[] args) { System.out.println(new Integer(5) == new Integer(5)); // false System.out.println(new Integer(500) == new Integer(500)); // false System.out.println(Integer.valueOf(5) == Integer.valueOf(5)); // true System.out.println(Integer.valueOf(500) == Integer.valueOf(500)); // false } }
Warum gibt Zeile (3) true und Zeile (4) false zurück? Die Antwort liegt im Caching-Mechanismus. Die Werte 5 und -5 werden von der JVM zwischengespeichert, sodass zwei Instanzen von new Integer(5) auf dasselbe Objekt verweisen. Allerdings wird 500 nicht zwischengespeichert, sodass zwei Instanzen von new Integer(500) unterschiedliche Objekte sind. Integer.valueOf() hingegen verwendet einen zusätzlichen Cache, der alle Ganzzahlen enthält, um sicherzustellen, dass für Werte innerhalb dieses Caches (normalerweise alle Ganzzahlen im Bereich [-128; 127]) dasselbe Objekt zurückgegeben wird.
Das obige ist der detaillierte Inhalt vonWarum bevorzugen Java-Entwickler primitive Typen gegenüber Wrapper-Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!