Showing results for stringbuilder java
Search instead for string builder java

You're on the right track by understanding the immutability of the String class.

Based on [1] and [2], here are some cases where each type of implementation is recommended:

1. Simple String Concatenation

String answer = firstPart + "." + secondPart;

This is syntactic sugar for

String answer = new StringBuilder(firstPart).append("."). append(secondPart).toString();

This is actually quite performant and is the recommended approach for simple string concatenation [1].

2. Stepwise Construction

String answer = firstPart;
answer += ".";
answer += secondPart;

Under the hood, this translates to

String answer = new StringBuilder(firstPart).toString(); 
answer = new StringBuilder(answer).append(".").toString(); 
answer = new StringBuilder(answer).append(secondPart).toString();

This creates a temporary StringBuilder and intermediate String objects which are inefficient [1]. Especially if the intermediate results are not used.

Use StringBuilder in this case.

3. For Loop Construction and Scaling For Larger Collections

String result = "";

for(int i = 0; i < numItems(); i++) 
  result += lineItem(i);

return result;

The above code is O(n^2), where n is number of strings. This is due to the immutability of the String class and due to the the fact that when concatenating two strings, the contents of both are copied [2].

So it may be fine for a few fixed length items, but it will not scale. In such cases, use StringBuilder.

StringBuilder sb = new StringBuilder(numItems() * LINE_SIZE);

for(int i = 0; i < numItems(); i++)
  sb.append(lineItem(i));

return b.toString();

This code is O(n) time, where n is number of items or strings. So as the number of strings gets larger, you will see the difference in performance [2].

This code pre-allocates an array in the initialization of StringBuilder, but even if a default size array is used, it will be significantly faster than the previous code for a large number of items [2].

Summary

Use string concatenation if you are concatenating only a few strings or if performance is not of importance (i.e. a demonstration/toy-application). Otherwise, use StringBuilder or consider processing the string as a character array [2].

References:

[1] Java Performance: The Definitive Guide by Scott Oaks: Link

[2] Effective Java 3rd Edition by Joshua Bloch: Link

Answer from mukundvemuri on Stack Overflow
🌐
Oracle
docs.oracle.com › javase › 8 › docs › api › java › lang › StringBuilder.html
StringBuilder (Java Platform SE 8 )
July 21, 2026 - java.lang.StringBuilder · All Implemented Interfaces: Serializable, Appendable, CharSequence · public final class StringBuilder extends Object implements Serializable, CharSequence · A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee ...
🌐
GeeksforGeeks
geeksforgeeks.org › java › stringbuilder-class-in-java-with-examples
StringBuilder Class in Java - GeeksforGeeks
StringBuilder is a mutable sequence of characters provided by the java.lang package. Unlike String, its contents can be modified without creating a new object for every operation.
Published: 1 week ago
Discussions

[Java] What exactly is stringBuilder and why use it instead of a traditional String?
If I remember correctly, Java will do things in memory that you might not be aware of. String is an example of this, it will allocate additional memory because it creates a new string object when doing += in Java More on reddit.com
🌐 r/learnprogramming
5
1
January 6, 2021
Why would you use a StringBuilder method over a String in Java? - Stack Overflow
What are the benefits of using a StringBuilder method over a String? Why not just amend the content within a String? I understand that a StringBuilder is mutable, but if you have to write more line... More on stackoverflow.com
🌐 stackoverflow.com
java - How can I clear or empty a StringBuilder? - Stack Overflow
I'm using a StringBuilder in a loop and every x iterations I want to empty it and start with an empty StringBuilder, but I can't see any method similar to the .NET StringBuilder.Clear in the More on stackoverflow.com
🌐 stackoverflow.com
Stringbuilder vs. String - why use String builder
A String in java is immutable. Basically when you do + using String it just creates another string and stores it in memory. In loops that can quickly get out of control. Stringbuilder concatenation does not have that problem. Hope my explanation was good. More on reddit.com
🌐 r/learnjava
10
7
March 7, 2018
🌐
Microsoft Learn
learn.microsoft.com › en-us › dotnet › api › system.text.stringbuilder
StringBuilder Class (System.Text) | Microsoft Learn
sb.Append(new char[] { 'D', 'E', 'F' }); // Append a format string to the end of the StringBuilder. sb.AppendFormat("GHI{0}{1}", 'J', 'k'); // Display the number of characters in the StringBuilder and its string. Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString()); // Insert a string at the beginning of the StringBuilder.
🌐
Reddit
reddit.com › r/learnprogramming › [java] what exactly is stringbuilder and why use it instead of a traditional string?
r/learnprogramming on Reddit: [Java] What exactly is stringBuilder and why use it instead of a traditional String?
January 6, 2021 -

Going through firecode.io and saw this solution (to replace spaces with a certain string)

public static String replace(String a, String b) {

    String ans = "";
    for (char c: a.toCharArray() ){
        if (c == ' '){ ans += b; }
        else { ans += c; }
    }
    return ans;

}

A user commented and said:

Use StringBuilder instead - it's more efficient! String does not allow appending. Each method you invoke on a String creates a new object and returns it. This is because String is immutable - it cannot change its internal state. On the other hand StringBuilder is mutable. When you call append(..) it alters the internal char array, rather than creating a new string object.

I'm curious about this and wanted to ask (I'm new to Java):

  • If a traditional 'String' is immutable, why am I able to use it in a "+=" operation to append a char at the end?

  • So when you use the "+=" operation, the computer instantiates a brand new String object each and every time you do it? So effectively I'm creating/destroying multiple String objects over and over again with every "+="?

  • Coming from C++, I see a lot of the "+=" operation when working with strings. Is it the same situation in C++ as it is expressed here in Java?

🌐
Medium
medium.com › @YodgorbekKomilo › mastering-javas-stringbuilder-the-ultimate-guide-for-beginners-8a579eb6d1f6
💡 Mastering Java’s StringBuilder: The Ultimate Guide for Beginners 🚀 | by Yodgorbek Komilov | Medium
May 9, 2025 - StringBuilder sb = new StringBuilder("race"); sb.append("car"); System.out.println(sb); // racecar sb.reverse(); System.out.println(sb); // racecar (palindrome!) Let’s solve a coding problem — print even and odd-indexed characters of a string separately: import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int t = scanner.nextInt(); scanner.nextLine(); // Consume newline for (int i = 0; i < t; i++) { String s = scanner.nextLine(); StringBuilder even = new StringBuilder(); StringBuilder odd = new StringBuilder(); for (int j = 0; j < s.length(); j++) { if (j % 2 == 0) { even.append(s.charAt(j)); } else { odd.append(s.charAt(j)); } } System.out.println(even + " " + odd); } scanner.close(); } }
🌐
IONOS
ionos.com › digital guide › websites › web development › java stringbuilder
How to use Java’s StringBuilder - IONOS
January 3, 2025 - Java’s String­Builder has 4 con­struc­tors that help convert the string into the right format for the class. They are also used for con­fig­u­ra­tion. Here are the four con­struc­tors and their purposes: StringBuilder(): Generates an empty String­Builder with a maximum capacity of 16 char­ac­ters
Find elsewhere
🌐
Hyperskill
hyperskill.org › university › java › java-stringbuilder
Java StringBuilder
December 4, 2024 - Strings in Java are immutable which means that once created, a string cannot be changed. If we want to modify the content of a string object, we should create a new string. This may not be the best way when we perform a lot of modifications because each operation creates a new object, which is bad for performance. Fortunately, there is a special class named StringBuilder that is used to create mutable string objects.
🌐
GitHub
github.com › openjdk-mirror › jdk7u-jdk › blob › master › src › share › classes › java › lang › StringBuilder.java
jdk7u-jdk/src/share/classes/java/lang/StringBuilder.java at master · openjdk-mirror/jdk7u-jdk
* @see java.lang.String · * @since 1.5 · */ public final class StringBuilder · extends AbstractStringBuilder · implements java.io.Serializable, CharSequence · { · /** use serialVersionUID for interoperability */ static final long serialVersionUID = 4383685877147921099L; ·
Author: openjdk-mirror
Top answer
1 of 2
9

You're on the right track by understanding the immutability of the String class.

Based on [1] and [2], here are some cases where each type of implementation is recommended:

1. Simple String Concatenation

String answer = firstPart + "." + secondPart;

This is syntactic sugar for

String answer = new StringBuilder(firstPart).append("."). append(secondPart).toString();

This is actually quite performant and is the recommended approach for simple string concatenation [1].

2. Stepwise Construction

String answer = firstPart;
answer += ".";
answer += secondPart;

Under the hood, this translates to

String answer = new StringBuilder(firstPart).toString(); 
answer = new StringBuilder(answer).append(".").toString(); 
answer = new StringBuilder(answer).append(secondPart).toString();

This creates a temporary StringBuilder and intermediate String objects which are inefficient [1]. Especially if the intermediate results are not used.

Use StringBuilder in this case.

3. For Loop Construction and Scaling For Larger Collections

String result = "";

for(int i = 0; i < numItems(); i++) 
  result += lineItem(i);

return result;

The above code is O(n^2), where n is number of strings. This is due to the immutability of the String class and due to the the fact that when concatenating two strings, the contents of both are copied [2].

So it may be fine for a few fixed length items, but it will not scale. In such cases, use StringBuilder.

StringBuilder sb = new StringBuilder(numItems() * LINE_SIZE);

for(int i = 0; i < numItems(); i++)
  sb.append(lineItem(i));

return b.toString();

This code is O(n) time, where n is number of items or strings. So as the number of strings gets larger, you will see the difference in performance [2].

This code pre-allocates an array in the initialization of StringBuilder, but even if a default size array is used, it will be significantly faster than the previous code for a large number of items [2].

Summary

Use string concatenation if you are concatenating only a few strings or if performance is not of importance (i.e. a demonstration/toy-application). Otherwise, use StringBuilder or consider processing the string as a character array [2].

References:

[1] Java Performance: The Definitive Guide by Scott Oaks: Link

[2] Effective Java 3rd Edition by Joshua Bloch: Link

2 of 2
5

You cannot change the original string because it is immutable therefore having String s = ""; every operation like

s += "something";

will create and reassign new object (probably it will also add a little bit of work for GC in near future). On he other hand modifying StringBuilder is (usually) not creating new object (indeed it is happening just once at the very end when calling toString() method on builder instance)

Because of this it is common to use StringBuilder when you are modifying string many many times (for example in some long loops).

Still it is common error to overuse StringBuilder - it may be example of premature optimization


Read also:

  • Is it better to reuse a StringBuilder in a loop?
🌐
Baeldung
baeldung.com › home › java › java string › stringbuilder vs stringbuffer in java
StringBuilder and StringBuffer in Java | Baeldung
January 8, 2024 - Simply put, StringBuilder was introduced in Java 1.5 as a replacement for StringBuffer.
🌐
Codecademy
codecademy.com › docs › java › stringbuilder
Java | StringBuilder | Codecademy
April 24, 2025 - In Java, the StringBuilder class is a part of the java.lang package that creates a mutable sequence of characters. Unlike String objects, which are immutable, StringBuilder allows modifying character sequences without creating new objects for ...
🌐
The Knowledge Academy
theknowledgeacademy.com › blog › stringbuilder-java
StringBuilder in Java: Constructors, Methods, and Examples
April 9, 2026 - Strings in Java, once declared, are immutable, and changes like appending, deleting and replacing cannot be made to the object that has been declared. StringBuilder in Java allows you to make changes to strings in real-time.
🌐
Woodcroft University
woodcroftuniversity.online › blog › what-is-stringbuilder-in-java-guide
What is StringBuilder in Java? A Beginner’s Guide
July 16, 2026 - StringBuilder is a class in Java used to create mutable (modifiable) string objects. It belongs to the java.lang package and provides an efficient way to handle string operations.
🌐
Simplilearn
simplilearn.com › home › resources › software development › stringbuilder in java: constructors, methods, and examples
Stringbuilder in Java: Constructors, Methods, and Examples [Updated]
July 8, 2026 - StringBuilder in Java is used to create mutable (modifiable) string. Learn all about it, important methods and constructors, and more now. Start learning!
Address: 5851 Legacy Circle, 6th Floor, Plano, TX 75024 United States
🌐
GitHub
github.com › openjdk › jdk › blob › master › src › java.base › share › classes › java › lang › StringBuilder.java
jdk/src/java.base/share/classes/java/lang/StringBuilder.java at master · openjdk/jdk
Care should be exercised if {@code StringBuilder} * objects are used as keys in a {@code SortedMap} or elements in a {@code SortedSet}. * See {@link Comparable}, {@link java.util.SortedMap SortedMap}, or · * {@link java.util.SortedSet SortedSet} for more information.
Author: openjdk
🌐
Oracle
docs.oracle.com › en › java › javase › 11 › docs › api › java.base › java › lang › StringBuilder.html
StringBuilder (Java SE 11 & JDK 11 )
January 20, 2026 - The principal operations on a StringBuilder are the append and insert methods, which are overloaded so as to accept data of any type. Each effectively converts a given datum to a string and then appends or inserts the characters of that string to the string builder.
🌐
Oracle
docs.oracle.com › javase › tutorial › java › data › buffers.html
The StringBuilder Class (The Java™ Tutorials > Learning the Java Language > Numbers and Strings)
The principal operations on a StringBuilder that are not available in String are the append() and insert() methods, which are overloaded so as to accept data of any type. Each converts its argument to a string and then appends or inserts the characters of that string to the character sequence in the string builder.
🌐
Tutorialspoint
tutorialspoint.com › java › lang › java_lang_stringbuilder.htm
Java StringBuilder Class
The Java StringBuilder class is mutable sequence of characters. This provides an API compatible with StringBuffer, but with no guarantee of synchronization. StringBuilder class can be used to replace StringBuffer where single threaded operations ...
🌐
YouTube
youtube.com › do some dev
Java StringBuilder - YouTube
Want to build, manipulate, and modify strings with ease and efficiency? Meet the Java StringBuilder! This powerful class is designed to handle dynamic string...
Published: September 13, 2024
Views: 83