Heim >Java >javaLernprogramm >String-Konstantenpool: Warum erstellt „new' ein neues String-Objekt, selbst wenn das Literal vorhanden ist?
String-Konstanten-Pool: Eine eingehende Untersuchung
String-Literale in Java werden gepoolt, um die Speichernutzung zu optimieren und die Leistung zu steigern. Das heißt, wenn ein String-Literal gefunden wird, überprüft der Compiler den String-Konstantenpool auf ein vorhandenes String-Objekt mit demselben Wert. Wenn der Verweis gefunden wird, wird er auf das vorhandene Objekt verwiesen, wodurch die Erstellung eines neuen Objekts vermieden wird.
Es kommt jedoch zu Verwirrung, wenn der „new“-Operator zum Erstellen eines neuen String-Objekts verwendet wird, da dies scheinbar der Regel widerspricht des Praktikums. Um dies zu verdeutlichen, untersuchen wir die folgenden Aussagen:
Diese Anweisungen weisen darauf hin, dass das String-Literal zwar interniert und im Pool gespeichert wird, die Verwendung von „new“ die JVM jedoch dazu zwingt, ein neues String-Objekt zu erstellen. Dies bedeutet, dass der „new“-Operator trotz der Existenz eines äquivalenten Strings im Pool diesen umgeht und ein neues Objekt im Nicht-Pool-Speicher zuweist.
Um dies zu veranschaulichen, betrachten Sie das folgende Beispiel:
String one = new String("test"); String two = "test"; System.out.println(one.equals(two)); // true System.out.println(one == two); // false
Wie erwartet ist der Wert von „one“ und „two“ „test“, aber der „==“-Vergleich gibt „false“ zurück, da sie sich auf unterschiedliche String-Objekte beziehen. Dies liegt daran, dass die Verwendung von „new“ die Erstellung eines neuen String-Objekts für „one“ erzwingt, obwohl das String-Literal „test“ bereits im Pool vorhanden ist.
Zusammenfassend lässt sich sagen, dass der String-Konstantenpool optimiert wird Speichernutzung durch Internierung von String-Literalen. Die Verwendung von „new“ umgeht jedoch den Pool und erstellt ein neues String-Objekt im Nicht-Pool-Speicher. Dies führt zu zwei unterschiedlichen String-Objekten mit demselben Wert, aber unterschiedlichen Referenzen.
Das obige ist der detaillierte Inhalt vonString-Konstantenpool: Warum erstellt „new' ein neues String-Objekt, selbst wenn das Literal vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!