String拼接方式

假如想象 提交于 2020-03-01 16:47:15

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效率最高

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!