Der Wert von String ist unveränderlich.
Die StringBuffer -Klasse ist mit der String -Klasse gleich und wird auch zur Darstellung von Zeichenfolgen verwendet. Speicherverbrauch.
StringBuffer bereitet standardmäßig einen 16-Byte-Länge-Puffer zu.
StringBuffer ist nicht wie Zeichenfolge.
StringBuffer Str1 = neuer StringBuffer (); von 16 Bytes der Länge ist hinter StringBuffer str3 = neuer StringBuffer (www.weixueyuan.net) reserviert;
Die Hauptmethoden der StringBuffer -Klasse
Die Methoden in der StringBuffer -Klasse konzentrieren sich hauptsächlich auf den Betrieb von Zeichenfolgen wie Anhängen, Einfügen und Löschen, was auch der Hauptunterschied zwischen der StringBuffer -Klasse und der String -Klasse ist. In der tatsächlichen Entwicklung wird empfohlen, StringBuffer zu verwenden, wenn Sie häufige Änderungen an einer Zeichenfolge vornehmen müssen.
1) Methode append ()
Mit der Methode append () werden Inhalte an das Ende der aktuellen Zeichenfolge angehängt, ähnlich einer String -Verkettung. Nach dem Aufrufen dieser Methode ändert sich auch der Inhalt des StringBuffer -Objekts, beispielsweise:
StringBuffer str = new StringBuffer ("biancheng100"); Str.Append (true);
Dann wird der Wert des Objekts STRE "Biancheng100True". Beachten Sie, dass sich der von STR angezeigte Inhalt geändert hat, nicht der Zeigen von STR.
Der "+" -Operation einer Zeichenfolge erstellt zuerst ein StringBuffer -Objekt, dann die Methode append () auf, um die String -Fragmente zu spleißen, und rufen Sie schließlich die Methode toString () auf, um sie in eine Zeichenfolge umzuwandeln.
Auf diese Weise hat der Verbindungsbetrieb von String mehr zusätzliche Vorgänge als StringBuffer, und die Effizienz wird zwangsläufig reduziert.
Für kleinere Saiten ist der "+" -Operation jedoch intuitiver und lesbarer, und manchmal können Sie die Effizienz ein wenig opfern.
2) DeletEcharat ()
Mit der Methode von DelETecharat () werden Zeichen an der angegebenen Position gelöscht und eine neue Zeichenfolge verbleibender Zeichen bildet. Zum Beispiel:
StringBuffer str = new StringBuffer ("abcdef"); str.
Dieser Code löscht das Zeichen mit einem Indexwert von 3, d. H. Das "D" -Scharakter.
Sie können auch mehrere Zeichen gleichzeitig durch die Methode Delete () löschen, z. B.:
StringBuffer str = new StringBuffer ("abcdef"); Str.Delete (1, 4);
Dieser Code löscht Zeichen mit Indexwerten zwischen 1 und 4, einschließlich des Indexwerts 1, jedoch nicht 4.
3) Insert () -Methode
Insert () wird verwendet, um eine Zeichenfolge an einem angegebenen Ort einzufügen und kann als eine aktualisierte Version von append () angesehen werden. Zum Beispiel:
StringBuffer str = new StringBuffer ("abcdef"); Str.insert (3, "xyz");
Die von STR hervorgehobene Zeichenfolge ist ABCDXYZEF.
4) setCharat () -Methode
Die Methode setCharat () wird verwendet, um die Zeichen an der angegebenen Position zu ändern. Zum Beispiel:
StringBuffer str = new StringBuffer ("abcdef"); Str.Setcharat (3, 'z');
Dieser Code ändert das Zeichen mit einem Indexwert von 3 bis z, und die Zeichenfolge, auf die STR mit ABCZEF hingewiesen wird.
Das obige ist nur eine einfache Erklärung für einige häufig verwendete Methoden.
Vergleich der Effizienz zwischen String und StringBuffer
Um ihre Ausführungseffizienz klarer zu erkennen, fügt der folgende Code 10.000 Mal 26 englische Buchstaben hinzu.
public class Demo {public void main (String [] args) {String fragment = "AbcDefghijklMnopqrstuvwxyz"; (int i = 0; i <Times; i ++) {str1 += Fragment; // von StringBuffer Long Timestart2 = System.CurrentTimillis (); (); Auslaufergebnisse:
String: 5287MSSstringBuffer: 3 ms
Die Schlussfolgerung ist offensichtlich, dass die Ausführungseffizienz von StringBuffer tausend Male schneller ist als String.
String: 35923msSstringBuffer: 8ms
Daher wird dringend empfohlen, StringBuffer zu verwenden, wenn es viele String -Operationen umfasst.
StringBuilder -Klasse
Die Funktionen der StringBuilder-Klasse und der StringBuffer-Klasse sind im Grunde genommen ähnlich, und die Methoden sind ähnlich. etwas schneller sein.
Die charSequence -Schnittstelle ist in StringBuffer, StringBuilder und String implementiert.
Charsequence ist eine Schnittstelle, die String -Operationen definiert.
Der Implementierungsprozess der charSequence -Schnittstelle von StringBuffer, StringBuilder und String ist unterschiedlich, wie in der folgenden Abbildung gezeigt:
Es ist zu erkennen, dass String die charsequence -Schnittstelle direkt implementiert.
Zusammenfassen
Fadensicherheit:
StringBuffer: Thread-Safe
StringBuilder: Threads sind nicht sicher
Geschwindigkeit:
Im Allgemeinen ist die Geschwindigkeit von schnell nach langsamer StringBuilder> StringBuffer> String, natürlich ist dies relativ und nicht absolut.
Nutzungsumgebung:
Verwenden Sie die String, um eine kleine Datenmenge zu betreiben.
Verwenden Sie StringBuilder, um große Datenmengen in einem einzelnen Thread zu betreiben.
Der Multithreading -Betrieb großer Datenmengen verwendet StringBuffer.