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.
Allerdings kommt es 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 Anweisungen:
Diese Anweisungen zeigen an, 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.
Betrachten Sie zur Veranschaulichung 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3