7 Unterschied zwischen String und StringBuffer in Java

Contents

Was ist ein Puffer in Java?

Ein Puffer ist ein Teil des Speichers, der zum Speichern eines Datenstroms von Peripheriegeräten verwendet wird. Dann wird dieser Datenstrom aus diesem Puffer gesammelt und in Variablen gespeichert. Ein Stream kann als kontinuierlicher Datenfluss definiert werden. Der Puffer ist sehr nützlich, da Java alles als String behandelt.

Was ist String in Java?

Strings in Java sind Objekte, die intern von einem Char-Array unterstützt werden. Da Arrays unveränderlich sind (nicht wachsen können), sind Strings ebenfalls unveränderlich. Immer wenn eine Änderung an einem String vorgenommen wird, wird ein völlig neuer String erstellt. 

Eigenschaften von Java-String

  • Das Java-String-Objekt ist unveränderlich, dh Sie können den Wert des Strings nach seiner Erstellung nicht mehr ändern.
  • Die String-Klasse ist langsamer, während eine Verkettungsoperation ausgeführt wird.
  • Die String-Klasse überschreibt die equals()-Methode der Object-Klasse. So können Sie den Inhalt zweier Strings mit der Methode equals () vergleichen.
  • Die String-Klasse verwendet den String-Konstantenpool.
  • String ist langsam und verbraucht mehr Speicher, wenn wir zu viele Strings verketten, da jedes Mal eine neue Instanz erstellt wird.

Eigenschaften von Java StringBuffer

  • Java StringBuffer ist änderbar, dh nachdem Sie StringBuffer erstellt haben, können Sie den Wert von StringBuffer ändern.
  • Die StringBuffer-Klasse ist beim Ausführen von Verkettungsvorgängen schneller.
  • Die Klasse StringBuffer überschreibt nicht die Methode equals() der Klasse Object.
  • StringBuffer verwendet Heap-Speicher.
  • StringBuffer ist schnell und verbraucht weniger Speicher, wenn wir die Strings verketten.

Warum ist String in Java final?

Warum String in Java unveränderlich oder final ist. Die Zeichenfolge ist in Java unveränderlich, da Zeichenfolgenobjekte im Zeichenfolgenpool zwischengespeichert werden. Gleichzeitig wurde String endgültig gemacht, damit niemand die Invariante der String-Klasse, z. B. Unveränderlichkeit, Caching, Hashcode-Berechnung usw., durch Erweitern und Überschreiben von Verhaltensweisen kompromittieren kann.

Wie wird StringBuffer implementiert?

StringBuffer/StringBuilder wird viel effizienter implementiert, indem ein Array aller Strings erstellt und nur bei Bedarf in einen String zurückkopiert wird. Überspringen von x + 2x + 3x im Wesentlichen bis (n-1)x. Der einzige Kopiervorgang, der ausgeführt werden muss, tritt auf, wenn die Zeichenfolge zum Kopieren bereit ist.

Kann StringBuffer in String konvertiert werden?

Ein StringBuffer-Objekt kann mit der toString()-Methode der Object-Klasse in einen String konvertiert werden. Im obigen Code soll die Methode equals() auf String-Objekte, aber nicht auf StringBuffer-Objekte angewendet werden; das heißt, sb1. euqals(sb2) löst einen Fehler aus. Um also zwei StringBuffer-Objekte zu vergleichen, müssen sie in Strings konvertiert werden.

Lesen Sie auch: == Operator vs. gleich ()

String vs. StringBuffer

Grundlage des VergleichsSchnur Zeichenfolgenpuffer
LagerungString-PoolHaufen Speicher
WandlungsfähigkeitUnveränderlichVeränderlich
Leistung
Langsamer als StringBuffer beim Ausführen der VerkettungSchneller als String bei der Durchführung der Verkettung
LängeFestKann erhöht werden
Verwendung in Thread-UmgebungWird nicht in einer Thread-Umgebung verwendetWird in einer Multithread-Umgebung verwendet
SynchronisationNicht synchronisiertSynchronisiert
SyntaxString-Variable = „String“;
String-Variable = neuer String (“String”);
StringBuffer-Variable = neuer StringBuffer(“String”);

Lesen Sie auch: Unterschied zwischen Wurf und Würfen

StringBuffer vs. StringBuilder

Da String in Java unveränderlich ist, wird bei jeder String-Manipulation wie Verkettung, Teilstring usw. ein neuer String generiert und der ältere String für die Garbage Collection verworfen.

Dies sind schwere Operationen und erzeugen eine Menge Müll in Haufen. Daher hat Java die Klassen StringBuffer und StringBuilder bereitgestellt, die für die String-Manipulation verwendet werden sollten.

StringBuffer war bis Java 1.4 die einzige Wahl für die String-Manipulation. Es hat jedoch einen Nachteil, dass alle seine öffentlichen Methoden synchronisiert sind. StringBuffer bietet Thread-Sicherheit, jedoch auf Kosten der Leistung.

In den meisten Szenarien verwenden wir String nicht in einer Multithread-Umgebung. Daher führte Java 1.5 eine neue Klasse StringBuilder ein, die StringBuffer ähnelt, abgesehen von Thread-Sicherheit und Synchronisation.

StringBuffer und StringBuilder sind veränderliche Objekte in Java. Sie bieten append()-, insert()-, delete()- und substring()-Methoden für die String-Manipulation.

Der Hauptunterschied zwischen StringBuffer und StringBuilder besteht darin, dass StringBuffer threadsicher ist, StringBuilder jedoch nicht. Dies bedeutet, dass, wenn verschiedene Threads auf dieselbe Instanz eines StringBuffer zugreifen/ diese ändern, ihr Zugriff so synchronisiert wird, dass das Ergebnis immer vorhersehbar ist. Da StringBuilder auch für die Verwendung durch einen einzelnen Thread konzipiert ist, sind die Operationen darauf schneller als die von StringBuffer, ansonsten haben sie größtenteils identische Methoden.

osky