关于字符串的拼接方式

Posted yamiya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于字符串的拼接方式相关的知识,希望对你有一定的参考价值。

1、加号

加号拼接字符串底层是调用StringBuilder来实现的,”a” + “b”等效于如下代码:

String a = "a";
StringBuilder ab= new StringBuilder();
ab.append(a).append("b");
String str = ab.toString();

但并不是说直接用加号拼接就可以达到StringBuilder的效率了,因为用加号每拼接一次都会新建一个StringBuilder对象,并且最后toString()方法还会生成一个String对象。在循环拼接十万次的时候,就会生成十万个StringBuilder对象,十万个String对象,效率不是很好。

2、concat拼接

查看底层源码,发现concat其实就是申请一个char类型的buf数组,将需要拼接的字符串都放在这个数组里,最后再转换成String对象。

public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
}

3、StringBuilder/StringBuffer

通过调用父类AbstractStringBuilder的append方法来拼接字符串,StringBuffer的append方法加了sychronized关键字,因此线程是安全的,而StringBuilder线程是不安全的。

查看源码发现其主要原理也是利用char数组保存字符,通过ensureCapacityInternal方法来保证数组容量可用还有扩容。

public AbstractStringBuilder append(String str) {
        if (str == null)
            return appendNull();
        int len = str.length();
        ensureCapacityInternal(count + len);
        str.getChars(0, len, value, count);
        count += len;
        return this;
}

 

以上是关于关于字符串的拼接方式的主要内容,如果未能解决你的问题,请参考以下文章

关于python字符串拼接的几种方法

字符串拼接的四种方式详解,代码测试

字符串拼接的四种方式详解,代码测试

关于代码片段的时间复杂度

java关于字符串拼接的问题

Java 中拼接 String 的 N 种方式