Hier ist die Ausgabe, die ich auf Java 1.6.0_27 bekomme:
%Vor%Kann jemand bitte die Ausgabe erklären. Ich weiß, Java unterscheidet zwischen String in Heap gespeichert und String in String "gemeinsamen Pool" gespeichert (die intern gespeichert werden kann). Wie unterscheidet sich ihre Repräsentation intern? Wie ändert es den Teilstringalgorithmus? Bitte zitieren Sie Bücher / Artikel / Blogs etc. wo immer es angebracht ist.
Siehe die Kommentare:
%Vor%Anmerkungen:
Sonderfall beim Aufruf von str1.substring(0,str1.length());
- siehe Code:
BEARBEITEN
Was ist eine Ansicht?
Bis Java 7u6 ist ein String im Grunde ein char[]
, das die Zeichen des Strings mit einem Offset und einem count enthält (dh der String besteht aus count
-Zeichen beginnend mit der offset
-Position in% co_de) %).
Beim Aufrufen der Teilzeichenfolge wird eine neue Zeichenfolge mit demselben char[]
, aber einem anderen Versatz / Anzahl erstellt, um effektiv eine Sicht auf die ursprüngliche Zeichenfolge zu erstellen. (Außer wenn count = Länge und Offset = 0 wie oben erklärt).
Seit Java 7u6 wird jedes Mal ein neues char[]
erstellt, weil in der String-Klasse kein% co- de% oder char[]
-Feld mehr vorhanden ist.
Wo wird der gemeinsame Pool genau gespeichert?
Dies ist implementierungsspezifisch. Der Standort des Pools wurde in den letzten Versionen tatsächlich verschoben. In neueren Versionen wird es auf dem Heap gespeichert.
Wie wird der Pool verwaltet?
Hauptmerkmale:
count
) offset
interniert ist (weil es ein Literal ist oder weil new String("abc").intern();
aufgerufen wird), gibt die JVM eine Referenz auf eine Zeichenkette im Pool zurück, wenn es eine ist, die S
bis% co_de ist % (daher intern()
sollte immer true zurückgeben). String
ist unveränderliches Objekt.
String#subString
- Erstellt einen neuen String. Quelle
Im Code ist es [jdk 6 öffnen] -
%Vor%