String, StringBuffer und StringBuilder in Java sind Stringklassen, die häufig für die Programmierung verwendet werden. Schauen Sie sich um ihre Unterschiede und dasselbe an.
1. variabel und unverändert
Die String -Klasse verwendet das Zeichenarray, um die Zeichenfolge zu speichern.
Privater endgültiger Charwert [];
Sowohl StringBuilder als auch StringBuffer werden von der AbstractStringBuilder -Klasse in AbstractStringBuileder geerbt. Das Zeichen -Array wird auch verwendet, um die Zeichenfolge zu speichern.
char [] Wert;
2. Ist es sicher?
Objekte in der Zeichenfolge sind unveränderlich, die als konstant verstanden werden können, offensichtlich ist Faden sicher.
AbstractStringBuilder ist eine öffentliche übergeordnete Klasse zwischen StringBuilder und StringBuffer, die grundlegende Anbieter einer String definiert, wie z. B. Expansion, Anhängen, Einfügen, Index- und andere öffentliche Methoden.
StringBuffer fügt eine synchrone Sperre hinzu, oder die Aufrufmethode wird der Methode hinzugefügt, sodass es Thread -Safe ist. Siehe den folgenden Quellcode:
Kopieren Sie den Code -Code wie folgt:
Public synchronisierte StringBuffer reverse () {{) {
Super.Reverse ();
Gib dies zurück;
}
public int indexof (string str) {
Return indexof (str, 0);
}
StringBuilder hat keine synchrone Sperre für die Methode, daher ist es nicht -betrügerische Sicherheit.
3.. StringBuilder und StringBuffer gemeinsam
StringBuilder und StringBuffer haben öffentliche Elternklassen AbstractStringBuilder (Abstract Class).
Einer der Unterschiede zwischen abstrakten Klassen und Schnittstellen ist: Einige öffentliche Methoden einiger Unterklassen können in abstrakten Klassen definiert werden. der Methode in der Schnittstelle.
Die Methoden von StringBuilder und StringBuffer rufen alle öffentlichen Methoden in AbstractStringBuilder an, wie z. B. Super.Appending (...). Es ist nur so, dass StringBuffer das synchronisierte Schlüsselwort zur Synchronisierung der Methode hinzufügt.
Wenn das Programm nicht multi -thread ist, ist die Effizienz der Verwendung von StringBuilder höher als StringBuffer.