String,StringBuffer,StringBuilder对比
一、性能对比
public class testMain {
public static void main(String[] args) {
String str1 = "";
long startDate1 = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
str1 += "11";
}
long endDate1 = System.currentTimeMillis();
System.out.println(endDate1- startDate1);
long startDate2 = System.currentTimeMillis();
StringBuffer string2 = new StringBuffer();
for (int i = 0; i < 1000000; i++) {
string2.append("11");
}
long endDate2 = System.currentTimeMillis();
System.out.println(endDate2- startDate2);
long startDate3 = System.currentTimeMillis();
StringBuilder string3 = new StringBuilder();
for (int i = 0; i < 1000000; i++) {
string3.append("11");
}
long endDate3 = System.currentTimeMillis();
System.out.println(endDate3- startDate3);
System.out.println("拼接结束");
}
}
运行结果是:
String<StringBuffer<StringBuilder
分析原因:String是java里面一个不可变化字符串,如果有修改,要新开辟内存空间,废除过去的内存空间,这会导致大量的GC回收,性能在拼接过多字符串的时候会越来越差。而StringBuffer,StringBuilder都是动态字符串,可以随意拼接
为什么StringBuffer性能差于StringBuilder?
StringBuffer的append方法有同步锁,加锁对性能有损耗,故速度慢于StringBuilder。
但是StringBuffer线程安全,StringBuilder线程不安全