Der Operator new in Java wird verwendet, um neue Instanzen von Objekten zu erstellen. Der Prozess der Objekterstellung umfasst die Speicherm allocation, die Initialisierung von Feldern und den Aufruf des Konstruktors.
In klassischen Programmiersprachen konnten die Speicherallokation und die Objektinitialisierung getrennt erfolgen. In Java sind sie kombiniert und werden von der virtuellen Maschine (JVM) kontrolliert, was die Anzahl von Fehlern und Speicherlecks reduziert.
Das Missverständnis der Prozesse, die bei der Objekterstellung auftreten, kann zu falscher Initialisierung, Speicherlecks oder unerwartetem Verhalten führen.
Bei der Verwendung des Operators new:
Beispielcode:
Person p = new Person("Ivan", 20);
Danach entsteht im Speicher ein separates Person-Objekt, das verwendet werden kann.
Wesentliche Merkmale:
Kann man die Verwendung des Operators new bei der Erstellung von Objekten vermeiden?
Ja. Zum Beispiel beim Klonen (clone()), bei der Deserialisierung, beim Einsatz von Reflection (Class.newInstance()), aber diese bringen ihre eigenen Nuancen und Einschränkungen mit sich.
Erzeugt new ein neues Objekt im String-Pool?
Nein. Wenn ein String so erstellt wird — new String("abc"), wird ein neues Objekt im Heap erstellt, selbst wenn ein solcher String bereits im String-Pool vorhanden ist. Es ist besser, Literale für Strings zu verwenden.
Unterscheidet sich die Funktionsweise von new für Arrays?
Ja. Für Arrays allokiert der Operator new Speicher für alle Elemente des Arrays und initialisiert sie mit Standardwerten, ruft jedoch keine Konstruktoren für die Elemente auf, wenn es keine primitiven Typen sind.
String[] arr = new String[5]; // Alle Elemente werden null sein
Ein Entwickler schreibt:
String s1 = new String("hi"); String s2 = new String("hi"); System.out.println(s1 == s2); // false
Vorteile:
Nachteile:
Ein Entwickler schreibt:
String s1 = "hi"; String s2 = "hi"; System.out.println(s1 == s2); // true
Vorteile:
Nachteile: