We use the StringBuffer and StringBuilder classes when we work with mutable String objects since the String class is immutable.
Differences between the StringBuffer and StringBuilder classes are:
StringBuffer | StringBuilder | |
---|---|---|
StringBuffer is synchronized i.e. thread-safe. It means two threads can’t call the methods of StringBuffer simultaneously. | StringBuilder is non-synchronized i.e. not thread-safe. It means two threads can call the methods of StringBuilder simultaneously. | |
StringBuffer is less efficient than StringBuilder. | StringBuilder is more efficient than StringBuffer. |
StringBuffer vs StringBuilder Performance Testing
See in the following example the differences in performance between these two classes:
class Test { public static void main(String[] args) { long startTime = System.currentTimeMillis(); StringBuffer stringBuffer = new StringBuffer("Java"); for (int i = 0; i < 8000000; i++) { stringBuffer.append("Programming"); } System.out.println("Time taken by StringBuffer: " + (System.currentTimeMillis() - startTime) + "ms"); startTime = System.currentTimeMillis(); StringBuilder stringBuilder = new StringBuilder("Java"); for (int i = 0; i < 8000000; i++) { stringBuilder.append("Programming"); } System.out.println("Time taken by StringBuilder: " + (System.currentTimeMillis() - startTime) + "ms"); } }
Output: Time taken by StringBuffer: 324ms Time taken by StringBuilder: 208ms
The program output shows that the StringBuffer class took longer to complete the given task.
Conclusion:
If we need to work with a mutable String, and we don’t care if it’s not thread-safe, then we should choose StringBuilder.
That was all regarding StringBuffer vs StringBuilder. Proceed to the next lesson.
Happy Learning!