Die Beispiele in diesem Artikel fassen die Verwendung von Strings in Java zusammen. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Die Essenz eines Strings ist ein Array vom Typ char, aber in Java sind alle mit doppelten Anführungszeichen „“ deklarierten Strings Objekte der String-Klasse. Dies spiegelt auch die vollständig objektorientierten Spracheigenschaften von Java wider.
String-Klasse
1. Das String-Klassenobjekt repräsentiert eine konstante Zeichenfolge. Es ist von unveränderlicher Länge. Mit anderen Worten: Sobald eine Instanz der String-Klasse erstellt wurde, kann die durch diese Instanz dargestellte Zeichenfolge nicht mehr geändert werden. Ähnlich
str = str + "Hallo";
Diese Operation erstellt im Wesentlichen ein neues String-Objekt durch die Kombination der beiden String-Objekte str und „Hello“ und weist dann str die Referenz des neuen String-Objekts zu. Eine übermäßige Verwendung dieses Vorgangs kann zu Leistungseinbußen führen. Wenn Sie den Inhalt der Zeichenfolge häufig ändern müssen, sollten Sie die StringBuffer-Klasse oder die StringBuilder-Klasse verwenden. Wir können ein kleines Programm verwenden, um zu sehen, wie groß der Leistungsunterschied zwischen den Klassen String und StringBuffer ist.
class StringTest { public static void main(String[] args) { /** * 10.000 Anhängeoperationen mit String-Objekten bzw. StringBuffer-Objekten durchführen * Testausführungszeit * 2013.3.18 */ String constStr = ""; long lTime = System . currentTimeMillis(); for(int i = 0; i < 10000; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); for(int i = 0 ; i < 10000 ; ++i) strBuf.append(String.valueOf(i)); System.out.println("Buffered String: "+(System.currentTimeMillis()-lTime)); } }Ausführungsergebnis:
Es ist ersichtlich, dass StringBuilder Sekunden benötigt, die String-Klasse jedoch 300 ms, was den enormen Leistungsunterschied zeigt.
Sowohl StringBuilder als auch StringBuffered stellen ein String-Objekt variabler Länge dar. Der Unterschied zwischen ihnen besteht darin, dass die StringBuffered-Klasse eine gewisse Sicherheitsverarbeitung in Bezug auf die Thread-Synchronisierung durchführt, während StringBuilder das Gegenteil tut. Wenn Sie also nur in einer einzigen Zeile programmieren, ist StringBuilder etwas effizienter als StringBuffered (eigentlich ist der Unterschied nicht groß).
2. „Hello World“ ist ein String-Objekt. Wir können „Hello World“ direkt als Objekt verwenden, wie zum Beispiel:
if("Hallo".equals("Hallo")) System.out.println("Yes");Das Ausgabeergebnis ist Ja.
3. Beim Vergleichen von Zeichenfolgenobjekten müssen Sie zur Beurteilung die Methode equal() verwenden, anstatt einfach == zu verwenden. Da == vergleicht, ob die von zwei Referenznamen referenzierten Instanzen gleich sind, vergleicht die Methode equal(), ob die Zeichenfolgen in den beiden Objekten gleich sind.
Eine häufig gestellte Frage lautet: Wie viele String-Objekte generiert der folgende Codeausschnitt insgesamt?
String str1 = new String("Hello");String str2 = new String("Hello");Wahrscheinlich werden die meisten Leute antworten: 2. Tatsächlich werden hier jedoch insgesamt 3 String-Objekte generiert. Vergessen Sie nicht, dass „Hello“ neben str1 und str2 auch ein String-Objekt ist.
4. String-Pool (Pool)
Java verwaltet bei der Ausführung einen String-Pool. Wenn eine durch doppelte Anführungszeichen deklarierte Zeichenfolge angezeigt wird, prüft die JVM zunächst, ob dasselbe Zeichenfolgenobjekt (mit denselben Zeichen) im Speicher vorhanden ist. Wenn es vorhanden ist, gibt es einen Verweis auf das bereits im Speicher vorhandene Objekt zurück Wenn es nicht existiert, wird ein neues String-Objekt erstellt. Das spart Speicherplatz. Wie im folgenden Codeabschnitt gezeigt, verweisen str1 und str2 tatsächlich auf dasselbe String-Objekt.
String str1 = "Hallo";String str2 = "Hallo";
5. Befehlszeilenparameter empfangen
Wenn wir die Hauptmethode deklarieren, deklarieren wir einen formalen Parameter vom Typ String[]. Dieses Array von String-Objekten speichert die Befehlszeilenparameter, die der Benutzer beim Ausführen dieses Programms übergeben hat. Beachten Sie, dass Befehlszeilenparameter in Java im Gegensatz zur C-Sprache mit der ersten Variablen nach dem Programmnamen beginnen. Mit anderen Worten: String[]-Daten enthalten nicht den Anwendungsnamen. Zum Beispiel:
class strCmd { public static void main(String[] args) { if(args.length > 0) { for(String str : args) System.out.println(str);Die Ausgabe beim Ausführen von Java strCmd Hello World!
6. Trennung der Saiten
Ähnlich wie strtok in der C-Sprache verfügt die String-Klasse auch über eine Split-Methode, die eine Zeichenfolge in einem bestimmten Format trennen kann. Die Split-Methode gibt ein Array von String-Objekten zurück, die jeden getrennten String darstellen. wie:
class strSplit { public static void main(String[] args) { String str = "Hello/tWorld/tI/tLove/tYou!"; str.split("/t"); for(String s : strArr) System.out.println(s);Unter anderem können die Parameter der Methode split() reguläre Ausdrücke sein. Sie können die statische Methode matches() der Matcher-Klasse im Paket java.util verwenden, um festzustellen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.
Die String-Klasse verfügt über viele weitere leistungsstarke Funktionen, und wir sollten lernen, die API-Dokumentation zu lesen. Hier spiegelt sich die Bedeutung der englischen Sprache wider...
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.