String , StringBuilder and StringBuffer
Here we are going to understand and explain the difference between String , StringBuilder and StringBuffer . As you will find that there are minor differences between the above mentioned classes are as follows:
|String is immutable ( once created can
not be changed )object.The object created as a String is stored in the
Constant String Pool . Every immutable object in Java is thread safe ,that
implies String is also thread safe . String can not be used by two threads
String once assigned can not be changed .
String demo = " hello java " ;
// The above object is stored in constant string pool and its value can not be modified.
String demo = " hi java " ;
//new "hi java" string is created in
constant pool and referenced by the demo variable
|StringBuffer is mutable means one can
change the value of the object . The object created through StringBuffer is
stored in the heap . StringBuffer has the same methods as the StringBuilder
, but each method in StringBuffer is synchronized that is StringBuffer is
thread safe .
Due to this it does not allow two threads to simultaneously access the same method . Each method can be accessed by one thread at a time .
But being thread safe has disadvantages too as the performance of the StringBuffer hits due to thread safe property . Thus StringBuilder is faster than the StringBuffer when calling the same methods of each class.
StringBuffer value can be changed , it means it can be assigned to the new value . Nowadays its a most common interview question ,the differences between the above classes .
String Buffer can be converted to the string by using
StringBuffer test = new StringBuffer("Hello") ;
// The above object stored in heap and its value can be changed .
test=new StringBuffer("hello java");
Above statement is right as it modifies the value which is allowed in the
|StringBuilder is same as the
StringBuffer , that is it stores the object in heap and it can also be
modified . The main difference between the StringBuffer and StringBuilder is
that StringBuilder is also not thread safe.
StringBuilder is fast as it is not thread safe .
StringBuilder demo= new
|Storage Area in Constant String Pool||Storage Area in heap||Storage Area in heap|
|Modifiable No (immutable)||Yes( mutable )||Yes( mutable )|
|Thread Safe Yes||Thread Safe Yes||Thread Safe No|
|Performance Fast||Performance very slow||Performance Fast|