Heim > Java > javaLernprogramm > Der Unterschied zwischen String und StringBuffer in JAVA

Der Unterschied zwischen String und StringBuffer in JAVA

巴扎黑
Freigeben: 2016-12-20 11:38:15
Original
897 Leute haben es durchsucht

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");

StringBuffer ist bei String-Verbindungsvorgängen effizienter als String:

String str = new String("welcome to" );

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.

Auf diese Weise wird Das ursprüngliche Objekt ist nutzlos und wird im Müll gesammelt.


Sehen Sie sich den folgenden Code an:

1 = "abcdefghijklmnopqrstuvwxyz";
2. int times = 5000;

3. long lstart1 = System.currentTimeMillis();

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);

Das Ergebnis ist manchmal 16 Immer noch 0

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

StringBuffer sb = new StringBuffer(str);

sein sb.append("here");

str = sb.toString();


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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage