String、StringBuilder和StringBuffer的区别

一、String
1
2
3
4
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {

}

String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。

二、StringBuilder和StringBuffer

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder和StringBuffer的区别在于,StringBuilder不是线程安全的。因此 StringBuilder 相较于 StringBuffer 有速度优势,多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

三、三者的继承结构