String StringBuilder StringBuffer区别


String StringBuilder StringBuffer区别

StringBuffer

StringBuffer

StringBuffer原理 (openjdk version "1.8.0_252")

abstract class AbstractStringBuilder implements Appendable, CharSequence {
    /**
     * The value is used for character storage.
     */
    char[] value;

    /**
     * The count is the number of characters used.
     */
    int count;

StringBuffer在效率上要高于String 主要时直接操作char[] value,不再新建一个String对象,其中主要方法 append,insert都会改变value的大小 StringBuffer 操纵 主要方法 newCapacity (openjdk version "1.8.0_252")

private int newCapacity(int minCapacity) {
        // overflow-conscious code
        int newCapacity = (value.length << 1) + 2;
        if (newCapacity - minCapacity < 0) {
            newCapacity = minCapacity;
        }
        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
            ? hugeCapacity(minCapacity)
            : newCapacity;
    }

StringBuilder vs StringBuffer

相同点:都是继承自AbstractStringBuilder, 不同点:StringBuilder不是线程安全的,可以说StringBuilder是在不需要考虑线程安全的条件下替换StringBuffer而设计的

速度上:String<StringBuffer<StringBuilder 线程安全:StringBuffer线程安全,StringBuilder线程不安全 总结:如果对字符串的改变少,使用String 如果对字符串修改的较多,需要线程安全就用StringBuffer,不需要就使用StringBuilder

注: StringBuilder详解 StringBuffer详解