String: Geeks StringBuilder: Geeksforgeeks StringBuffer: Geeksforgeeks
- Concat1: In this method, we pass a string “Geeks” and perform “s1 = s1 + ”forgeeks”. The string passed from main() is not changed, this is due to the fact that String is immutable. Altering the value of string creates another object and s1 in concat1() stores reference of the new string. References s1 in main() and cocat1() refer to different strings.
- Concat2: In this method, we pass a string “Geeks” and perform “s2.append(“forgeeks”)” which changes the actual value of the string (in main) to “Geeksforgeeks”. This is due to the simple fact that StringBuilder is mutable and hence changes its value.
- Concat3: StringBuffer is similar to StringBuilder except for one difference that StringBuffer is thread-safe, i.e., multiple threads can use it without any issue. The thread-safety brings a penalty of performance.
When to use which one :
- If a string is going to remain constant throughout the program, then use the String class object because a String object is immutable.
- If a string can change (for example: lots of logic and operations in the construction of the string) and will only be accessed from a single thread, using a StringBuilder is good enough.
- If a string can change and will be accessed from multiple threads, use a StringBuffer because StringBuffer is synchronous, so you have thread-safety.
- If you don’t want thread-safety than you can also go with StringBuilder class as it is not synchronized.
Conversion between types of strings in Java
Sometimes there is a need for converting a string object of different classes like String, StringBuffer, StringBuilder to one-another. Below are some techniques to do the same.
1. From String to StringBuffer and StringBuilder:
This one is easy. We can directly pass the String class object to StringBuffer and StringBuilder class constructors. As the String class is immutable in java, so for editing a string, we can perform the same by converting it to StringBuffer or StringBuilder class objects. Below is the java program to demonstrate the same.
2. From StringBuffer and StringBuilder to String:
This conversion can be performed using toString() method which is overridden in both StringBuffer and StringBuilder classes.
Below is the java program to demonstrate the same. Note that while we use toString() method, a new String object(in Heap area) is allocated and initialized to the character sequence currently represented by the StringBuffer object, which means the subsequent changes to the StringBuffer object do not affect the contents of the String object.
StringBuffer object to String : Geeks StringBuilder object to String : Hello GeeksForGeeks Geeks
3. From StringBuffer to StringBuilder or vice-versa:
This conversion is tricky. There is no direct way to convert the same. In this case, We can use a String class object. We first convert the StringBuffer/StringBuilder object to String using toString() method and then from String to StringBuilder/StringBuffer using constructors.
Below is the java program to demonstrate the same.
- Objects of String are immutable, and objects of StringBuffer and StringBuilder are mutable.
- StringBuffer and StringBuilder are similar, but StringBuilder is faster and preferred over StringBuffer for the single-threaded program. If thread safety is needed, then StringBuffer is used.
Related Article :
Reverse a string in Java (5 Different Ways)
This article is contributed by Pranjal and Gaurav Miglani. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.