Java8性能优化之字符串拼接
字符串拼接常用到的几种方式如下:
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 = new StringBuilder(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在单线程下的比较测试如下:
由以上测试结果可以看出,在百万级别以下这两种方式是难分伯仲的,但是上升的千万级别的时候差别就很明显了。
代码优化(性能提升)任重道远,希望大牛能给予建议。
初心回归,时光已逝!