Heim >Java >javaLernprogramm >Erstellt „new String('abc')` ein neues String-Objekt im String-Pool von Java?

Erstellt „new String('abc')` ein neues String-Objekt im String-Pool von Java?

DDD
DDDOriginal
2024-12-25 21:48:16729Durchsuche

Does `new String(

Verwirrung durch Java-String-Pool-Duplizierung

Betrachten Sie den folgenden Codeausschnitt:

String first = "abc";
String second = new String("abc");

Durch die Verwendung des neuen Schlüsselworts wird ein erstellt neues String-Objekt. Es stellt sich jedoch die Frage: Befindet sich dieses neue Objekt im regulären Heap oder im String-Pool? Und wie viele String-Objekte landen im Pool?

String-Pool-Mechanismus

Der String-Pool dient als Cache und optimiert die Speichernutzung. Wenn Sie einen literalen String wie „abc“ deklarieren, erkennt der Compiler ihn und ruft das vorhandene String-Objekt aus dem Pool ab, sofern eines vorhanden ist. Sowohl s als auch p im folgenden Beispiel verweisen auf dasselbe String-Objekt:

String s = "abc";
String p = "abc";

Auswirkung von new String()

Erstellen eines neuen String-Objekts jedoch mit new String("abc") erstellt ein separates Objekt, das nicht im Pool gespeichert ist. Der Pool speichert einen Verweis auf das Literal „abc“, aber nicht die mit new generierte Kopie.

Da String in Java unveränderlich ist, ist es sinnlos, new String(„literal“) zu verwenden, da dies unnötigen Overhead verursacht.

Interning Strings

Der Aufruf der intern()-Methode für ein String-Objekt fügt es hinzu zum Pool, falls es noch nicht vorhanden ist. Diese Methode gibt einen Verweis auf den gepoolten String zurück, unabhängig davon, ob er bereits im Pool war oder nicht.

Fazit

Im Wesentlichen wird durch die Verwendung des neuen Schlüsselworts ein separater String erstellt Objekt außerhalb des Pools, auch wenn dieselbe Literalzeichenfolge bereits im Pool vorhanden ist. Der String-Pool speichert nur Verweise auf Literal-Strings und optimiert so die Speicherzuweisung. Es ist wichtig, sich dieses Verhaltens bewusst zu sein, um unnötige Objekterstellung zu vermeiden und eine effiziente Speicherverwaltung zu fördern.

Das obige ist der detaillierte Inhalt vonErstellt „new String('abc')` ein neues String-Objekt im String-Pool von Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn