1、拼接操作与append操作的效率对比
1.1、通过创建对象角度分析
- StringBuilder的append()的方式:自始至终只创建一个StringBuilder的对象
- 使用String的字符串拼接方式:创建过多个StringBuilder和String的对象
1.2、通过内存和垃圾回收分析
- 使用String的字符串拼接方式:内存中由于创建了较多的StringBuilder和String对象,内存占用更大,如果进行GC,需要花费额外的时间。
1.3、改进的空间
- 在实际开发中,如果基本确定要前前后后添加的字符串长度不高于某个限定值highLevel的情况下,建议使用构造器实例化
- StringBuilder s=new StringBuilder(highLevel) ; //new char[highLevel]
package string; import org.junit.Test; public class StringTest5 { @Test public void test6() { long start = System.currentTimeMillis(); method1(100000); // method2(100000); long end = System.currentTimeMillis(); System.out.println("花费的时间为:" + (end - start)); } public void method1(int highLevel) { String src = ""; for (int i = 0; i < highLevel; i++) { //822毫秒 src = src + "a";//每次循环都会创建一个StringBuilder、String } } public void method2(int highLevel) { StringBuilder src = new StringBuilder(); for (int i = 0; i < highLevel; i++) { src.append("a");//9毫秒 } } }
- 因为每次使用字符串拼接方式,都会创建一个新的StringBuilder对象和一个新的String对象。而使用StringBuilder只需要创建一个对象,然后在该对象上不断追加字符串即可。由于创建对象需要时间,因此使用StringBuilder拼接字符串的速度更快。