StringBuffer- und StringBuilder-Klasse in Java

Both StringBuffer and StringBuilder are two important classes in Java which represents mutable String i.e. the String object, whose value can be changed. Since String is Immutable in Java, any change or operation on String object e.g. converting it to upper or lower case, adding character, removing a character, or getting a substring, all results in a new String object.

Anyway, when StringBuffer was introduced it has its own problem e.g. it was synchronized, methods like append have synchronized and hence they were slower. Even if you use them by just one thread and don’t share with other threads, the cost of acquiring and releasing lock due to Synchronization is still significant.

Since StringBuffer is mostly used as local mutable String variable making it synchronized wasn’t a great decision and Java designer realized their mistake and corrected it in Java 1.5 by introducing the StringBuilder class.

As I have said that both StringBuffer and StringBuilder are a mutable alternative of String class and you can change the content without creating additional objects. With String example program in java

Here are some more key differences between StringBuilder and StringBuffer in Java:

  1. StringBuffer is present in Java and StringBuilder was added in Java 5.

  2. Both StringBuffer and StringBuilder represents mutable String which means you can add/remove characters, substring without creating new objects.

  3. You can convert a StringBuffer into String by calling toString() method.

  4. Both StringBuilder and StringBuffer doesn’t override equals() and hashCode() method because they are mutable and not intended to be used as a key in hash-based collection classes e.g. HashMap, Hashtable, and HashSet.

  5. StringBuffer is synchronized which means all method which modifies the internal data of StringBuffer is synchronized e.g. append(), insert() and delete(). On the contrary, StringBuilder is not synchronized.

  6. Because of synchronization StringBuffer is considered thread safe e.g. multiple threads can call its method without compromising internal data structure but StringBuilder is not synchronized hence not thread safe.

  7. Another side effect of synchronization is speed. Since StringBuffer is synchronized its lot slower than StringBuilder.

  8. The default length of StringBuffer is 16 characters. You should explicitly define the size of it, especially if you know that size would be less or more than 16 to avoid wasting memory and spending time during resize.

  9. In general, you should always use StringBuilder for String concatenation and creating dynamic String unless and until you are absolutely sure that you need StringBuffer.

  10. The string concatenation done using + (plus) operator internally uses StringBuffer or StringBuilder depending upon which Java version you are using. For example, if you are running in Java 5 or higher than StringBuilder will be used and for the lower version, StringBuffer will be used.

Related blog:

Spring boot interview questions

Recommended Posts

StringBuffer- und StringBuilder-Klasse in Java
[Java] Unterschied zwischen StringBuffer und StringBuilder
Informationen zur Java StringBuilder-Klasse
Java - StringBuilder vs StringBuffer
Definition und Instanziierung von Java-Klassen
[Java] Über String und StringBuilder
Unterschied zwischen StringBuilder und StringBuffer
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Verwendung von Abstract Class und Interface in Java richtig
[Java] Umgang mit Zeichenketten (String-Klasse und StringBuilder-Klasse)
Implementieren Sie Thread in Java und versuchen Sie, die anonyme Klasse Lambda zu verwenden
Beispiel für Codierung und Decodierung in Java
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Verstehe gleich und hashCode in Java
Hallo Welt in Java und Gradle
Mechanismus und Merkmale der in Java häufig verwendeten Collection-Implementierungsklasse
Was ist eine Klasse in der Java-Sprache (3 /?)
[Java] Unterschiede zwischen Instanzvariablen und Klassenvariablen
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
[Java] Vergleich von Sammlungs- und StringBuilder-Operationsmethoden
Java-Programmierung (statische Klausel und "Klassenvariablen")
Erstellen einer Matrixklasse in Java Teil 1
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Programmieren Sie PDF-Kopf- und Fußzeilen in Java
Lernen Sie Flyweight-Muster und ConcurrentHashMap in Java
Die Richtung von Java in "C ++ Design and Evolution"
Von Java nach C und von C nach Java in Android Studio
Lesen und Schreiben von GZIP-Dateien in Java
Unterschied zwischen int und Integer in Java
Diskriminierung von Enum in Java 7 und höher
Java-Klassenmethoden
Klasse und Modell
[Java] Klassenvererbung
Java-Scanner-Klasse
Partisierung in Java
Java HashMap-Klasse
Java (abstrakte Klasse)
Änderungen in Java 11
Janken in Java
[Java] Verschachtelte Klasse
Anonyme Java-Klasse
Über die Java-Klasse
Java und JavaScript
XXE und Java
[Java] Abstrakte Klasse
Umfangsrate in Java
[Java] Objektklasse
Lokale Java-Klasse
FizzBuzz in Java
GetInstance () aus einer @ Singleton-Klasse in Groovy aus Java
In Bezug auf transiente Modifikatoren und Serialisierung in Java
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Erkennen Sie ähnliche Videos in Java und OpenCV Version 2
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Unterschied zwischen next () und nextLine () in Java Scanner