Heim  >  Artikel  >  Java  >  Eingehende Analyse der Unterschiede zwischen String, StringBuffer und StringBuilder in Java

Eingehende Analyse der Unterschiede zwischen String, StringBuffer und StringBuilder in Java

高洛峰
高洛峰Original
2017-01-22 11:26:211624Durchsuche

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. Veränderlich 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, wie unten gezeigt Beide 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, was offensichtlich Thread-sicher ist? sicher.

AbstractStringBuilder ist die gemeinsame übergeordnete Klasse von StringBuilder und StringBuffer. Sie definiert einige grundlegende String-Operationen wie 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.

StringBuilder- und StringBuffer-Methoden rufen öffentliche 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 schließlich nicht über mehrere Threads verfügt, ist die Verwendung von StringBuilder effizienter als StringBuffer.

Die obige ausführliche Analyse der Unterschiede zwischen String, StringBuffer und StringBuilder in Java ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie PHP unterstützen Chinesische Website.

Für eine detailliertere Analyse der Unterschiede zwischen String, StringBuffer und StringBuilder in Java beachten Sie bitte die chinesische 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