美文网首页
StringBuffer 和 StringBuilder

StringBuffer 和 StringBuilder

作者: 云敲窗 | 来源:发表于2020-11-30 15:55 被阅读0次
StringBuffer 和 StringBuilder
1 相同点:

(1) StringBuffer 和 StringBuilder 都继承了AbstractStringBuilder

(2) StringBuffer和StringBuilder底层初始化容量都是16

(3) StringBuffer和StringBuilder都只是生成一个String对象

2 不同点:

(1) StringBuffer 是线程安全,StringBuilder是线程不安全的,(因为StringBuffer中的方法都是由synchronized关键字修饰的)

(2) StringBuffer中使用的是 一个char[] 数组作为缓冲区,StringBuilder中根据传值,通过值的length+初始化容量变为此时的容量大小

StringBuffer 扩容源码如下(实际是 AbstractStringBuilder扩容方法)


  /**
     * This implements the expansion semantics of ensureCapacity with no
     * size check or synchronization.
     */
    void expandCapacity(int minimumCapacity) {
        int newCapacity = value.length * 2 + 2;
        if (newCapacity - minimumCapacity < 0)
            newCapacity = minimumCapacity;
        if (newCapacity < 0) {
            if (minimumCapacity < 0) // overflow
                throw new OutOfMemoryError();
            newCapacity = Integer.MAX_VALUE;
        }
        value = Arrays.copyOf(value, newCapacity);
    }

PS: 从上所看(<p>value.length * 2 + 2;</p>
缓冲区长度*2+2 >传进来的容量大小,那么就将传进来的容量大小作为该StringBuffer的容量)

相关文章

网友评论

      本文标题:StringBuffer 和 StringBuilder

      本文链接:https://www.haomeiwen.com/subject/qxarwktx.html