【JDK源码分析】StringBuilder、StringBuilder、String、AbstractStringBuilder源码解析

前言

JDK 8
String为不可变,StringBuilder、StringBuffer都为可变。
类图

为什么String是不可变的?
// final修饰,禁止继承String
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    // final修饰数组,初始化后无法再次赋值
    private final char value[];
    ...
}
StringBuilder、StringBuffer

两者都继承于AbstractStringBuilder
其中StringBuffer为线程安全,append操作会进行同步


    // 用于缓存每次toString的值,当value被修改时置为null    
    private transient char[] toStringCache;
    @Override
    synchronized StringBuffer append(AbstractStringBuilder asb) {
        toStringCache = null;
        super.append(asb);
        return this;
    }

猜你喜欢

转载自blog.csdn.net/ifucking/article/details/81108063