String 字符串的拼接方式有以下几种:“+”号拼接、concat()、StringBuilder、StringBuffer
先说结论,就性能方面而言,建议使用顺序为 StringBuilder > StringBuffer > concat() > "+"
StringBuilder 和 StringBuffer 都是可变字符串,但StringBuilder不是线程安全的,适用于单线程环境,StringBuffer 是线程安全的,用于多线程环境。
两者的实现是封装一个可修改的字符数组,字符数组中可以有空位置未被使用,有实例变量记录已使用的字符个数,append方法会直接拷贝字符到内部的字符数组,如果长度不够还可以拓展。
StringBuilder 方法的实现
StringBuffer 在方法中加上synchronized关键字,即加锁保证线程安全。
“+”号拼接实现原理是将String转成了StringBuilder后,使用其append方法进行处理的。
1 String str0 = "a"; 2 StringBuilder sb = new StringBuilder(); 3 sb.append(str0).append("b"); 4 String str1 = sb.toString();
concat() 拼接首先创建一个字符数组,长度是已有字符串和待拼接字符串的长度之和,再把两个字符串的值复制到新的字符数组中,并使用这个字符数组创建一个新的String对象并返回。
经过concat方法,其实是new了一个新的String。
从0到10万的所有数字进行拼接,得到如下结果,可以看到StringBuilder效率最高
来源:https://www.cnblogs.com/pengwuliang/p/12390095.html