Es gibt unzählige Informationen im Internet über den Unterschied zwischen String und StringBuffer, aber als ich diesen Artikel sah, hatte ich das Gefühl, dass die kleinen Beispiele darin sehr repräsentativ sind, also habe ich mich darauf konzentriert und selbst eine Zusammenfassung erstellt.
Es gibt drei Klassen in Java, die für Zeichenoperationen verantwortlich sind.
1.Character arbeitet mit einem einzelnen Zeichen und
2.String arbeitet mit einer Zeichenfolge. Unveränderliche Klassen.
3.StringBuffer arbeitet auch mit einer Zeichenfolge, es handelt sich jedoch um eine Variablenklasse.
String:
ist ein Objekt, kein primitiver Typ.
ist ein unveränderliches Objekt. Sobald es erstellt wurde, kann sein Wert nicht geändert werden.
Änderungen an vorhandenen String-Objekten sind alle neu Erstellen Sie ein neues Objekt und speichern Sie den neuen Wert darin.
String ist eine endgültige Klasse, das heißt, sie kann nicht vererbt werden.
StringBuffer:
ist ein veränderbares Objekt Objekt wird nicht wie String neu erstellt
Es kann nur über den Konstruktor erstellt werden,
StringBuffer sb = new StringBuffer();
Hinweis: Es kann nicht über das Wertsymbol
sb bezahlt werden = "Willkommen hier!";//Nachdem das Fehlerobjekt erstellt wurde, wird Speicherplatz im Speicher zugewiesen und zunächst ein Nullwert gespeichert. Beim Bezahlen des Werts an StringBuffer
können Sie dessen Anhang übergeben method.
sb.append("hello");
str += "here"; Die Verarbeitungsschritte von
bestehen tatsächlich darin, einen StringBuffer zu erstellen, append() aufzurufen und schließlich
den StringBuffer anSting() zu übertragen. und natürlich ist die Effizienz beeinträchtigt.
Und da das String-Objekt ein unveränderliches Objekt ist, wird jedes Mal, wenn Sting ausgeführt wird, ein neues Objekt neu erstellt, um den neuen Wert zu speichern.
Sehen Sie sich den folgenden Code an:
1 = "abcdefghijklmnopqrstuvwxyz";
2. int times = 5000;
5 0; i < times; - lstart1);
10. System.out.println(time about);
Das sind 46 Sekunden.
Sehen wir uns den folgenden Code noch einmal an
1. String tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int times = 5000;
3. long lstart2 = System.currentTimeMillis();
4. StringBuffer sb = new StringBuffer();
5. for (int i = 0; i < times; i++) {
= System.currentTimeMillis();
9. long time2 = (lend2 - lstart2);
10. System.out.println(time2);
Also das Die Schlussfolgerung liegt auf der Hand: StringBuffer ist fast zehntausendmal schneller als String. Natürlich sind diese Daten nicht sehr genau. Denn bei einer Zyklenzahl von 100.000 ist der Unterschied noch größer. Wenn Sie mir nicht glauben, versuchen Sie es.
Gemäß dem oben Gesagten:
str += "here"; Der Verarbeitungsschritt von
besteht tatsächlich darin, einen StringBuffer zu erstellen und append() aufzurufen , schließlich
dann StringBuffer toSting();
also str += "here"; kann äquivalent zu
Der obige Code, der „+“ direkt zum Verbinden von String verwendet, kann also grundsätzlich dem folgenden Code entsprechen
1. String tempstr = "abcdefghijklmnopqrstuvwxyz";
2. int times = 5000;
3. long lstart2 = System.currentTimeMillis();
5. for (int i = 0; i < times; i++) {
6. StringBuffer sb = new StringBuffer(str);
7 sb.toString();
10. long lend2 = System.currentTimeMillis();
11. long time2 = (lend2 - lstart2);
Die durchschnittliche Ausführung Die Zeit beträgt etwa 46922, also 46 Sekunden.
Zusammenfassung: Wenn Sie Zeichenfolgen in Ihrem Programm häufig ändern und verbinden müssen, ist die Leistung mit StringBuffer höher