2. Vier Möglichkeiten, eine Zeichenfolge zu erstellen
Methode zwei: Objekte durch die Konstruktionsmethode generieren
String str1 = new String("Hallo Wort");
Methode 3: Objekt durch Zeichenarray generieren
char[] data = new char[]{'a', 'b','c'};
Methode 4: Durch String Statische Methode valueOf (beliebiger Datentyp) = > In String konvertieren (häufig verwendet)
String str2 = String.valueOf(10);
3. String-Literal
" abc " - > Das Literal eines Strings ist eigentlich ein String-Objekt
String str = „Hallo Wort“;
String str2 = str;
Zu diesem Zeitpunkt ist dies sowohl ein String-Literal als auch ein String-Objekt. Um das Verständnis zu erleichtern, denken wir zunächst daran, dass es gespeichert ist Der Heap wird jedoch tatsächlich im Methodenbereich gespeichert. Wenn str2 = „Hello“ ist, hat dies keinen Einfluss auf die Ausgabe von str, da „Hello“ ebenfalls ein Zeichenfolgenobjekt ist, was darauf hinweist, dass es sich um ein neues handelt Zu diesem Zeitpunkt wurde Speicherplatz auf dem Heap geöffnet, und str2 speichert zu diesem Zeitpunkt den Adressraum des neuen Objekts, was keine Auswirkungen auf str hat
4 Der String-Vergleich ist gleich
Alle Referenzdatentypen werden verglichen Wenn sie gleich sind, verwenden Sie zum Vergleichen häufig verwendete Klassen im JDK. Sie können sie direkt verwenden. Der Referenzdatentyp verwendet ==, um die Adressen zu vergleichen. Das Bild unten zeigt zwei Referenzen der gleiche Adressraum. Es hängt mit dem konstanten String-Pool zusammen. Die folgende Abbildung generiert zwei Objekte und zwei Adressräume. Die Verwendung von == gibt false zurück. Die Vergleichsgröße von equal ist ein Vergleich unter Berücksichtigung der Groß- und Kleinschreibung Bei der Methode „equalsIgnoreCase“ wird die Groß-/Kleinschreibung nicht beachtet. 2. String-Konstantenpool: Ein String-Konstantenpool wird verwaltet, wenn das Objekt nicht im Heap vorhanden ist wird generiert und zum String-Konstantenpool hinzugefügt. Wenn die direkte Zuweisungsmethode zum Generieren eines String-Objekts verwendet wird, findet die JVM, dass der Inhalt, auf den verwiesen wird, bereits im Konstantenpool vorhanden ist Erstellen Sie ein neues String-Objekt, verwenden Sie jedoch das vorhandene Objekt direkt wieder. Aus diesem Grund verweisen die drei Referenzen im obigen Bild auf dieselbe Adresse. Wenn das Objekt zum ersten Mal generiert wird, befindet sich nichts im Konstantenpool. Daher wird ein Zeichenfolgenobjekt generiert und im Konstantenpool gespeichert. Wenn das Objekt zum zweiten und dritten Mal generiert wird, stellt die JVM fest, dass derselbe Inhalt bereits im Konstantenpool vorhanden ist und keine neuen Objekte mehr generiert der gleiche Adressraum wie str1
Das Programm wird von rechts nach links ausgeführt. Zu diesem Zeitpunkt ist die rechte Seite der ersten Codezeile eine Zeichenfolgenkonstante, die auch ein Zeichenfolgenobjekt ist. Öffnen Sie daher zunächst ein Leerzeichen im Konstantenpool. und dann eine neue Zeichenfolge erstellen Das Objekt wird gespeichert und das Programm wird nach links ausgeführt. Wenn das neue Schlüsselwort auftritt, wird ein neues Objekt erstellt und im Heap gespeichert. Dann zeigt str1 auf das Objekt im Heap In der zweiten und dritten Codezeile wird festgestellt, dass der Konstantenpool vorhanden ist. Wenn das neue Schlüsselwort auftritt, wird die Speicherzuordnung wie folgt erstellt :
Die von der String-Klasse bereitgestellte interne Methode, dies ist eine lokale Methode:
Aufruf Die interne Methode speichert das Objekt, auf das die aktuelle String-Referenz zeigt, im String-Konstantenpool . Es gibt zwei Situationen:
1. Wenn das Objekt bereits im aktuellen Konstantenpool vorhanden ist, wird kein neues Objekt generiert und an das Konstanten-String-Objekt zurückgegeben.
2. Wenn das Objekt nicht im aktuellen Konstantenpool vorhanden ist, Fügen Sie das Objekt dem Pool hinzu und geben Sie die Adresse zurück, nachdem Sie den Pool betreten haben.
1. Schauen Sie sich die Ausgabe der folgenden Codezeilen an
Da die interne Methode einen Rückgabewert hat, ruft str1 zu diesem Zeitpunkt nur die interne Methode auf und empfängt den Rückgabewert nicht, sodass str1 immer noch auf zeigt das Objekt im Heap, str2 zeigt auf das Objekt im Konstantenpool, also gibt es false zurück
Solange Sie den Rückgabewert des Aufrufs der internen Methode erhalten, wird es true zurückgeben
Das Objekt, auf das str1 zeigt, wird manuell zum Pool hinzugefügt, und der Pool verfügt bereits über das Objekt. Lassen Sie str1 direkt auf das Objekt zeigen.
2. Schauen Sie sich die Ausgabe der folgenden Codezeilen an Pool, es gibt nichts im Pool, also verschieben Sie es direkt in den konstanten Pool
3. Unveränderlichkeit von Strings
Ein String ist nur ein Zeichenarray -> char[], der String wird tatsächlich im Zeichenarray gespeichert. Warum kann der Inhalt der Zeichenfolge nicht geändert werden? Schauen wir uns den Quellcode der Zeichenfolge an und finden es heraus.
Wir können sehen, dass das Zeichenarray in String gekapselt ist. Auf dieses Zeichenarray kann nicht von außerhalb der String-Klasse zugegriffen werden, geschweige denn der Inhalt des Strings geändert werden. String str = "hello";
2 .How um den Inhalt der Zeichenfolge zu ändern
1. Zerstören Sie die Kapselung des Wertearrays durch Reflektion zur Laufzeit 2. Ersetzen Sie die StringBuilder- oder StringBuffer-Klasse - - ist nicht mehr derselbe Typ
Wenn Sie Zeichenfolgen häufig verbinden müssen, verwenden Sie die Append-Methode der StringBuilder-Klasse. Hier wird nur ein Objekt generiert. Was sich nach einer Weile ändern wird, und bald wird es zu Hallo Welt
StringBuilder-Klasse und String Gegenseitige Konvertierung von Klassen:
1. StringBuilder kann durch Aufrufen der toString-Methode
2 in StringBuilder-Klasse konvertiert werden, indem der Konstruktor oder die Append-Methode von StringBuilder verwendet wird
Andere gängige Methoden:
b. Den angegebenen Datenbereich löschen, löschen (int start, int end); alle Inhalte von Anfang bis Ende löschen, links schließen und rechts öffnen
c , jeder Datentyp): Beginnen Sie mit dem Einfügen an der Startindexposition, und der Startindex des Einfügens ist start
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die String-Klasse von Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!