字符串拼接常用到的几种方式如下:
1、“+”拼接;
2、concat拼接;
3、StringBuilder(StringBuff)拼接。
几种拼接方式的比较测试如下:
代码:
//字符串拼接测试
String appendedStr = "a";
String appendStr= "b";
System.out.println("测试代码循环10000次。。。,结果如下:");long length = 10000;//➕号拼接
long begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {
appendedStr+=appendStr;
}long end =System.currentTimeMillis();
System.out.println("➕号拼接字符串用时:"+(end -begin));//concat拼接
begin =System.currentTimeMillis();for (int i = 0; i < length; i++) {
appendedStr.concat(appendStr);
}
end=System.currentTimeMillis();
System.out.println("concat拼接字符串用时:"+(end -begin));//stringbuilder拼接
begin =System.currentTimeMillis();
StringBuilder stringBuilder= newStringBuilder(appendedStr);for (int i = 0; i < length; i++) {
stringBuilder.append(appendStr);
}
stringBuilder.toString();
end=System.currentTimeMillis();
System.out.println("StringBuilder拼接字符串用时:"+(end - begin));
测试结果如下:
其中第一种方式拼接字符串在我的视眼中是最常见的,孰不知第一种方式是最不值得提倡的(性能消耗大,效率低),concat是由String类提供的封装类性能较“+”好很多,相较于前两者StringBuilder的速度基本可以忽略,快太多了。
以上没有测试StringBuff主要是因为StringBuff和StringBuilder的实现实现原理和操作基本上一致,主要差别是StringBuff是由synchronized修饰,支持并发操作线程安全的类。而StringBuilder是不支持并发操作的,所以多线程时建议使用StringBuff。单线程中StringBuilder的性能要好于StringBuff。
StringBuilder 和 StringBuff在单线程下的比较测试如下:
由以上测试结果可以看出,在百万级别以下这两种方式是难分伯仲的,但是上升的千万级别的时候差别就很明显了。
代码优化(性能提升)任重道远,希望大牛能给予建议。