String StringBuffer StringBuilder区别

String 字符串类,经常使用来定义常量或者不须要动态扩展的变量,由于它是一个不可变的字符串数组,java

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0
}

若是要常用“+”来修改变量的值,每作一次 + 就产生个 StringBuilder 对象,而后 append 后toString输出,接着就扔掉StringBuilder对象,屡次"+"操做就会产生屡次对象产生和销毁的开销,效率低下。
 数组

StringBuffer 和StringBuilder都继承AbstractStringBuilder,这里面定义的字符串数组是非final的,说明是可变的,能够经过append等方式动态扩展安全

可是二者又是有区别的,StringBuffer的线程安全的,如:多线程

@Override
    public synchronized StringBuffer append(Object obj) {
        toStringCache = null;
        super.append(String.valueOf(obj));
        return this;
    }

其操做数组的方法都是使用了同步操做的。app

而StringBuilder是非线程安全的,因此在多线程环境使用StringBuffer,其余时候使用StringBuilder线程更高一些。ide

 

String StringBuffer StringBuilder 三者性能为低-中-高性能

相关文章
相关标签/搜索