百度一下区别。
一、知识点
(1)String
String的局限性在于不可修改,是不可变的对象。因此,在每次对String 类型进行改变的时候,都生成了一个新的String对象,然后将指针指向它,这就形成了“string改变了”这样的错觉。
所以,经常改变内容的字符串最好不要用String,因为每次改变都会生成对象,对系统性能产生一点影响。当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,对应用会有影响。
(2)Stringbuffer
Java.lang.StringBuffer是线程安全的可变字符序列。一个类似于String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
Stringbuffer可以安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
在多线程中,如有线程安全的必要,可以使用StringBuffer。
(3)StringBuilder
如果可能,建议优先采用该类。因为在大多数实现中,它比StringBuffer要快。但是将StringBuilder的实例用于多个线程是不安全的。
如果需要这样的同步,则建议使用StringBuffer。
StringBuilder类可以在“无需创建一个新的字符串对象的情况下”修改字符串。
StringBuilder不是线程安全的,StringBuffer是线程安全的。但是StringBuilder在单线程中的性能比StringBuffer更好。所以单线程中,请使用StringBuilder。
二、总结
最新的解读可见:
http://www.xie4ever.com/2017/05/12/java-string-%E5%92%8C-stringbuilder-%E5%92%8C-stringbuffer/
给出了更详细的对比。