Search code examples
javastringstringbuilderstringbuffer

StringBuffer is obsolete?


In the book "Effective Java", Josh Bloch says that

StringBuffer is largely obsolete and should be replaced by the non-synchronized implementation 'StringBuilder'

.

But in my experience, I've still seen widespread use of the StringBuffer class. Why is the StringBuffer class now obsolete and why should StringBuilder be preferred over StringBuffer except for the increased performance due to non-synchronization?


Solution

  • It's obsolete in that new code on Java 1.5 should generally use StringBuilder - it's very rare that you really need to build strings in a thread-safe manner, so why pay the synchronization cost?

    I suspect code that you see using StringBuffer mostly falls into buckets of:

    • Written before Java 1.5
    • Written to maintain compatibility with older JDKs
    • Written by people who don't know about StringBuilder
    • Autogenerated by tools which don't know about StringBuilder