java中最简单的字符串拼接方式就是 "+" 号,但是其效率在数据量大时效率并不是很友好。
数据量大时,Stringbuilder中的append()效率就会凸显出来。
[1] 数据量小
两个方法并没有什么区别
"+"号拼接:
long starttime = System.currentTimeMillis();
String result = "";
for(int i=0; i<5000;i++){
result+="abcde12345abcde12345abcde12345";
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-starttime);
append方法:
long starttime = System.currentTimeMillis();
StringBuffer result = new StringBuffer();
for(int i=0; i<5000;i++){
result.append("abcde12345abcde12345abcde12345");
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-starttime);
[2]把数据量扩大
两者差距就能明显看出来了。
"+"号拼接:
long starttime = System.currentTimeMillis();
String result = "";
for(int i=0; i<20000;i++){
result+="abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345";
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-starttime);
append()方法:
long starttime = System.currentTimeMillis();
StringBuffer result = new StringBuffer();
for(int i=0; i<20000;i++){
result.append("abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde12345");
}
long endtime = System.currentTimeMillis();
System.out.println(endtime-starttime);
而数据量继续扩大效率差距只会越来越大。
[3]原理
"+"号拼接实际上也是在用append去完成,但是每次在拼接时程序都会去创建一个new Stringbuilder,循环越多他new的次数也越多,导致时间越慢。
[4]总结:
1.数据量小时,使用"+"号拼接和append()方法并没有实际区别。
2.数据量如果较大时,使用append()方法效率将大大提高。