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!