In Java werden String, StringBuffer und StringBuilder häufig in der Programmierung Streichelklassen verwendet. Der Unterschied zwischen ihnen ist auch eine Frage, die in Interviews häufig gestellt wird. Fassen Sie nun zusammen und sehen Sie, wie unterschiedlich und gleich sind.
1. variabel und unveränderlich
Die String -Klasse verwendet ein Zeichenarray, um Zeichenfolgen wie folgt zu speichern: Da es einen "endgültigen" Modifikator gibt, können Sie wissen, dass String -Objekte unveränderlich sind.
privater endgültiger Charwert [];
Sowohl StringBuilder als auch StringBuffer werden von der AbstractStringBuilder -Klasse geerbt. In AbstractStringBuilder werden Zeichenarrays verwendet, um Saiten zu retten. Wie folgt ist ersichtlich, dass beide Objekte veränderlich sind.
char [] Wert;
2. Ist es Multi-Thread und sicher?
Objekte in der Zeichenfolge sind unveränderlich, sodass sie als Konstanten verstanden werden können, die offensichtlich fadensicher sind.
AbstractStringBuilder ist eine öffentliche übergeordnete Klasse von StringBuilder und StringBuffer, die einige grundlegende Operationen von Zeichenfolgen wie Expansion, Anhängen, Einfügen, Indexof und andere öffentliche Methoden definiert.
StringBuffer hat der Methode oder einer Synchronisationsschloss der aufgerufenen Methode eine Synchronisationsschloss hinzugefügt, sodass es thread-sicher ist. Siehe den folgenden Quellcode:
public synchronisierte StringBuffer Reverse () {Super.Reverse (); return this;} public int indexof (string str) {return indexof (str,); // Es gibt eine öffentliche synchronisierte intindexof (string str, int ausIdex) Methode} StringBuilder fügt der Methode keine Synchronisierungssperrungen hinzu und ist daher nicht sicher.
3.. StringBuilder und StringBuffer gemeinsam
StringBuilder und StringBuffer haben öffentliche Elternklassen AbstractStringBuilder (Abstract Class).
Einer der Unterschiede zwischen abstrakten Klassen und Schnittstellen besteht darin, dass einige öffentliche Methoden der Unterklassen in abstrakten Klassen definiert werden können. Unterklassen müssen nur neue Funktionen hinzufügen und die vorhandenen Methoden nicht wiederholen. während Schnittstellen nur Methoden und Konstanten definieren.
Die Methoden von StringBuilder und StringBuffer rufen in AbstractStringBuilder wie Super.Append (...) öffentliche Methoden auf. Es ist nur so, dass StringBuffer der Methode synchronisiertes Schlüsselwort hinzufügt und es synchronisiert.
Wenn das Programm nicht multi-thread ist, ist die Verwendung von StringBuilder effizienter als StringBuffer.
Zusammenfassung des Unterschieds zwischen String StringBuffer StringBuilder in Java
* String -Klasse ist eine unveränderliche Klasse. Solange die Zeichenfolge geändert wird, werden neue Objekte generiert.
* StringBuffer und StringBuilder sind beide veränderliche Klassen, und es werden keine neuen Objekte durch Änderungen der Zeichenfolgen generiert.
Wenn Sie es in der Praxis verwenden, müssen Sie häufig eine Zeichenfolge ändern, z. B. Einfügen, Löschen usw.
* Aber was ist der Unterschied zwischen StringBuffer und StringBuilder?
StringBuffer ist threadsicher und in mehreren Thread-Programmen sehr bequem zu verwenden, aber die Effizienz des Programms wird langsamer sein.
StringBuilder ist nicht mit Thread sicher und in einem einzelnen Thread effizienter als StringBuffer.
* Im Allgemeinen die Laufzeit der drei:
String> StringBuffer> StringBuilder