Heim >Java >javaLernprogramm >Einführung in die Unterschiede zwischen String, StringBuffer und StringBuilder in Java

Einführung in die Unterschiede zwischen String, StringBuffer und StringBuilder in Java

高洛峰
高洛峰Original
2017-01-22 11:31:141640Durchsuche

String, StringBuffer und StringBuilder in Java sind String-Klassen, die häufig in der Programmierung verwendet werden. Die Unterschiede zwischen ihnen sind auch Fragen, die häufig in Interviews gestellt werden. Lassen Sie uns nun zusammenfassen und ihre Unterschiede und Gemeinsamkeiten betrachten.

1. Variabel und unveränderlich

Die String-Klasse verwendet ein Zeichenarray, um die Zeichenfolge zu speichern, wie unten gezeigt. Aufgrund des Modifikators „final“ können Sie erkennen, dass das Zeichenfolgenobjekt unveränderlich ist .

 private final char value[];

Sowohl StringBuilder als auch StringBuffer erben in AbstractStringBuilder auch Zeichenarrays zum Speichern von Zeichenfolgen Objekte können geändert werden.

 Char[] value;

2. Ist es Multi-Thread-sicher?

Die Objekte in String sind unveränderlich und können als Konstanten verstanden werden, die offensichtlich Thread-sicher sind. sicher.

AbstractStringBuilder ist die gemeinsame übergeordnete Klasse von StringBuilder und StringBuffer. Sie definiert einige grundlegende Operationen von Zeichenfolgen, wie z. B. expandCapacity, append, insert, indexOf und andere öffentliche Methoden.

StringBuffer fügt der Methode eine Synchronisationssperre hinzu oder fügt der aufrufenden Methode eine Synchronisationssperre hinzu, sodass sie threadsicher ist. Schauen Sie sich den folgenden Quellcode an:

public synchronized StringBuffer reverse() {
    super.reverse();
    return this;
}
public int indexOf(String str) {
    return indexOf(str, 0);        //存在 public synchronized int indexOf(String str, int fromIndex) 方法
}

StringBuilder fügt der Methode keine Synchronisationssperren hinzu, daher ist sie nicht threadsicher.

3. Was StringBuilder und StringBuffer gemeinsam haben

StringBuilder und StringBuffer haben eine gemeinsame übergeordnete Klasse, AbstractStringBuilder (abstrakte Klasse).

Einer der Unterschiede zwischen abstrakten Klassen und Schnittstellen besteht darin, dass abstrakte Klassen nur einige öffentliche Methoden von Unterklassen definieren müssen und keine vorhandenen Methoden neu schreiben müssen Definition von Konstanten.

Die Methoden von StringBuilder und StringBuffer rufen die öffentlichen Methoden in AbstractStringBuilder auf, z. B. super.append(...). Es ist nur so, dass StringBuffer das synchronisierte Schlüsselwort zur Synchronisierungsmethode hinzufügt.

Wenn das Programm nicht über mehrere Threads verfügt, ist die Verwendung von StringBuilder effizienter als StringBuffer.

Weitere verwandte Artikel zu den Unterschieden zwischen String, StringBuffer und StringBuilder in Java finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
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