StringBuilder和String的效率比较

先来个实际对比,同样加"hello" 3000次,可以看出时间差距很大

String方法

String是用的也是StringBuilder,每次加新的String的时候就用一个新的array,全部拷贝进去。可以反编译class文件看出来。

public class test {
    public static void main(String[] args) {
        String a = "ab";
        a += "c";
    }
}

StringBuilder方法

单独用StringBuilder不同之处在于,扩容时会array会扩到接近原来两倍,所以之后再加字符串时免去扩容。

    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;
    }
发布了42 篇原创文章 · 获赞 0 · 访问量 1712

猜你喜欢

转载自blog.csdn.net/weixin_42504835/article/details/104596092