Sobes.tech
Junior
161

Was ist der Unterschied zwischen der Erstellung eines Strings mit new String() und der Verwendung eines String-Literals?

Antwort von AI

sobes.tech KI

Bei der Verwendung eines String-Literals ("abc") wird die Zeichenkette im String-Pool erstellt. Wenn bereits eine Zeichenkette mit demselben Wert im Pool existiert, wird eine Referenz auf dieses bestehende Objekt zurückgegeben. Dies ist eine Optimierung zur Speicherersparnis.

Bei Verwendung von new String("abc") wird immer ein neues String-Objekt im Heap erstellt, auch wenn bereits eine Zeichenkette mit demselben Wert im Pool existiert.

Beispiel:

// Es wird ein String-Literal "hello" erstellt. Falls es noch nicht im Pool ist, wird es hinzugefügt.
// str1 verweist auf das Objekt im Pool.
String str1 = "hello";

// Das Literal "hello" wird erneut verwendet. Da es bereits im Pool ist,
// verweist str2 ebenfalls auf dasselbe Objekt im Pool wie str1.
String str2 = "hello";

// Es wird ein neues String-Objekt mit dem Wert "hello" im Heap erstellt.
// str3 verweist auf dieses neue Objekt im Heap, nicht auf das im Pool.
String str3 = new String("hello");

// Referenzüberprüfung:
// str1 und str2 verweisen auf dasselbe Objekt im Pool.
System.out.println(str1 == str2); // true

// str1 verweist auf das Objekt im Pool, str3 auf das neue Objekt im Heap.
System.out.println(str1 == str3); // false

// Wertüberprüfung:
// Alle Strings haben den gleichen Wert.
System.out.println(str1.equals(str3)); // true

Unterschiede in der Tabelle:

Kriterium String-Literal ("abc") new String("abc")
Erstellungsort String-Pool Heap (Heap)
Objekterstellung Gibt ein existierendes zurück oder erstellt ein neues Erstellt immer ein neues Objekt
Speicheroptimierung Nutzt den Pool effizient für Wiederholungen Kann Duplikate erstellen, weniger effizient
Vergleich der Referenzen (==) Häufig true für Strings mit demselben Wert Immer false für Strings mit demselben Wert, die separat erstellt wurden