import java.util.ArrayList;
import java.util.List; import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class TestString { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Test
public void testPlus() {
String s = "";
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
s = s + String.valueOf(i);
}
long te = System.currentTimeMillis();
logger.info("+ cost {} ms", te - ts);
} @Test
public void testConcat() {
String s = "";
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
s = s.concat(String.valueOf(i));
}
long te = System.currentTimeMillis();
logger.info("concat cost {} ms", te - ts);
} @Test
public void testJoin() {
List<String> list = new ArrayList<String>();
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
list.add(String.valueOf(i));
}
StringUtils.join(list, "");
long te = System.currentTimeMillis();
logger.info("StringUtils.join cost {} ms", te - ts);
} @Test
public void testStringBuffer() {
StringBuffer sb = new StringBuffer();
long ts = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sb.append(String.valueOf(i));
}
sb.toString();
long te = System.currentTimeMillis();
logger.info("StringBuffer cost {} ms", te - ts);
} @Test
public void testStringBuilder() {
StringBuilder sb = new StringBuilder();
long ts = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
sb.append(String.valueOf(i));
}
sb.toString();
long te = System.currentTimeMillis();
logger.info("StringBuilder cost {} ms", te - ts);
}
}

运行结果如下:

11:00:22,359  INFO TestString:23 - + cost 1828 ms 
11:00:22,921  INFO TestString:34 - concat cost 562 ms 
11:00:22,937  INFO TestString:46 - StringUtils.join cost 16 ms 
11:00:22,968  INFO TestString:58 - StringBuffer cost 31 ms 
11:00:23,031  INFO TestString:70 - StringBuilder cost 63 ms

要特别注意的是:

StringBuilder 循环的次数是其它的10倍,如果是一样,那么返回 0,可见StringBuilder 的速度之快。

总结:

用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。

Join 和 StringBuffer,相差不大,Join方式要快些,可见这种JavaScript中快速拼接字符串的方式在Java中也非常适用。

StringBuilder 的速度最快,但其有线程安全的问题,而且只有JDK5支持。

基于使用StringUtils.join需导入第三方包,使用StringBuilder可能有线程安全的问题,实际使用的,我一般首选StringBuffer

最新文章

  1. 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)
  2. PHP基础知识之对象复制
  3. C#实现控制Windows系统关机、重启和注销的方法:
  4. android超快模拟器Ggenymotion的安装和配置
  5. 解决ORA-00824: cannot set sga_target due to existing
  6. log的简单说明
  7. jquery设置元素的readonly与diabled属性方法
  8. 20145317彭垚《Java程序设计》第3周学习总结
  9. A Mathematical Curiosity 分类: HDU 2015-06-25 21:27 11人阅读 评论(0) 收藏
  10. PHP 正则表达式语法
  11. java url中文 编译和解码
  12. 问题:关于一个贴友的js留言板的实现
  13. HW4.13
  14. Java开发中文件读取方式总结
  15. Delphi 进阶基础技能说明
  16. 网站开启cdn加速的最简单步骤
  17. python学习笔记(十)、文件操作
  18. orcal - 增删改
  19. SpringBoot系列: Json的序列化和反序列化
  20. python - class类 (二) 静态属性/类方法/静态方法

热门文章

  1. [转]Eclipse遇到的常见问题
  2. 作用域+闭包+this理解
  3. 05.Hibernate多对多关联
  4. 【BZOJ】【1048】【HAOI2007】分割矩阵
  5. STMPClient 发送邮件显示 不允许使用邮件名称.
  6. html5.js
  7. 异步等待的 Python 协程
  8. c# 获取mac地址的2种方法
  9. C++引用变量(转)
  10. Linux的别名使用