String
is immutable, if you try to alter their values, another object gets created, whereas StringBuffer
and StringBuilder
are mutable so they can change their values.
Thread-Safety Difference:
The difference between
StringBuffer
and StringBuilder
is that StringBuffer
is thread-safe. So when the application needs to be run only in a single thread then it is better to use StringBuilder
. StringBuilder
is more efficient than StringBuffer
.
Situations:
- If your string is not going to change use a String class because a
String
object is immutable. - If your string can change (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 your string can change, and will be accessed from multiple threads, use a
StringBuffer
becauseStringBuffer
is synchronous so you have thread-safety.
String
|
StringBuffer
|
String
class is immutable.
|
StringBuffer
class is mutable.
|
String
is slow and consumes more memory when you concat too many strings because
every time it creates new instance.
|
StringBuffer
is fast and consumes less memory when you cancat strings.
|
String
class overrides the equals() method of Object class. So you can compare the
contents of two strings by equals() method.
|
StringBuffer
class doesn't override the equals() method of Object class.
|
StringBuffer
|
StringBuilder
|
Every
method present in StringBuffer is synchronized.
|
No
method present in StringBuilder is synchronized.
|
At
a time only one thread is allow to operate on the StringBuffer object hence
StringBuffer object is Thread safe.
|
At a time Multiple Threads are
allowed to operate simultaneously on the StringBuilder object hence
StringBuilder is not Thread safe.
|
It
increases waiting time of the Thread and hence relatively performance is low.
|
Threads
are not required to wait and hence
relatively performance is high.
|
Introduced in 1.0 version.
|
Introduced in 1.5 versions.
|