最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试。

代码如下:

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.junit.Test;
  5. import org.slf4j.Logger;
  6. import org.slf4j.LoggerFactory;
  7. public class TestString {
  8. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  9. @Test
  10. public void testPlus() {
  11. String s = "";
  12. long ts = System.currentTimeMillis();
  13. for (int i = 0; i < 10000; i++) {
  14. s = s + String.valueOf(i);
  15. }
  16. long te = System.currentTimeMillis();
  17. logger.info("+ cost {} ms", te - ts);
  18. }
  19. @Test
  20. public void testConcat() {
  21. String s = "";
  22. long ts = System.currentTimeMillis();
  23. for (int i = 0; i < 10000; i++) {
  24. s = s.concat(String.valueOf(i));
  25. }
  26. long te = System.currentTimeMillis();
  27. logger.info("concat cost {} ms", te - ts);
  28. }
  29. @Test
  30. public void testJoin() {
  31. List<String> list = new ArrayList<String>();
  32. long ts = System.currentTimeMillis();
  33. for (int i = 0; i < 10000; i++) {
  34. list.add(String.valueOf(i));
  35. }
  36. StringUtils.join(list, "");
  37. long te = System.currentTimeMillis();
  38. logger.info("StringUtils.join cost {} ms", te - ts);
  39. }
  40. @Test
  41. public void testStringBuffer() {
  42. StringBuffer sb = new StringBuffer();
  43. long ts = System.currentTimeMillis();
  44. for (int i = 0; i < 10000; i++) {
  45. sb.append(String.valueOf(i));
  46. }
  47. sb.toString();
  48. long te = System.currentTimeMillis();
  49. logger.info("StringBuffer cost {} ms", te - ts);
  50. }
  51. @Test
  52. public void testStringBuilder() {
  53. StringBuilder sb = new StringBuilder();
  54. long ts = System.currentTimeMillis();
  55. for (int i = 0; i < 100000; i++) {
  56. sb.append(String.valueOf(i));
  57. }
  58. sb.toString();
  59. long te = System.currentTimeMillis();
  60. logger.info("StringBuilder cost {} ms", te - ts);
  61. }
  62. }

运行结果如下:

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支持。

转载于:https://www.cnblogs.com/wxmdevelop/p/5182286.html

【转】Java 5种字符串拼接方式性能比较。相关推荐

  1. Java 5种字符串拼接方式性能比较。

    最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试. 代码如下: import java.util.ArrayList; import java.uti ...

  2. Golang的五种字符串拼接方式

    1.+号 func main() {s1 := "hello"s2 := "word"s3 := s1 + s2fmt.Print(s3) //s3 = &qu ...

  3. 用数据说话,Go 所有字符串拼接方式里哪种才是最稳定高效的?

    前言 日常业务开发中离不开字符串的拼接操作,不同语言的字符串实现方式都不同,在Go语言中就提供了6种方式进行字符串拼接,那这几种拼接方式该如何选择呢?使用那个更高效呢?今天我们邀请到公众号「Golan ...

  4. 选择合适的 Go 字符串拼接方式

    前言 哈喽,大家好,我是asong 日常业务开发中离不开字符串的拼接操作,不同语言的字符串实现方式都不同,在Go语言中就提供了6种方式进行字符串拼接,那这几种拼接方式该如何选择呢?使用那个更高效呢?本 ...

  5. Go字符串拼接方式深入比较

    前言 Go中字符串的拼接主要有"+".fmt.Sprintf+%s.strings.Join等方式,已经有很多人从耗时的角度比较这些方式的性能,本文则从源码的角度去分析下这些方式的 ...

  6. JAVA的字符串拼接与性能

    概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大.不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码测试. ...

  7. Go语言6种字符串拼接的方式

    Go语言6种字符串拼接的方式 前言 string类型 字符串拼接的6种方式及原理 原生拼接方式"+" 字符串格式化函数fmt.Sprintf Strings.builder byt ...

  8. C# 字符串拼接整理_C#字符串拼接方式整理

    C# 字符串拼接整理_C#字符串拼接方式整理 一.字符串连接使用+  注意:此方式多种语言通用,js,java中都可以如此操作 string hello = "Hello"; st ...

  9. 将页面多个下拉框的值以字符串拼接方式存放至数据库一个字段中

     1,当页面中有多个值,传入Controller并以字符串拼接方式,以","隔开存放至数据库一个字段中,页面中多个<select name="off"&g ...

  10. java 字符串倍_java字符串拼接与性能分析详解

    假设有一个字符串,我们将对这个字符串做大量循环拼接操作,使用"+"的话将得到最低的性能.但是究竟这个性能有多差?如果我们同时也把StringBuffer,StringBuilder ...

最新文章

  1. 怎样快速识别 英文地址中包含非英文字符_[论文笔记]端到端的场景文本识别算法--CRNN 论文笔记...
  2. arm中断保护和恢复_ARM中断返回的详细分析
  3. C语言递归实现深度优先搜索DFS算法(附完整源码)
  4. android 支付模块封装,Android集成支付----支付宝支付总结与封装
  5. php study是什么,phpstudy与wamp区别的区别是什么?
  6. PLSQL触发器随笔
  7. Bootstrap3 列表元素的样式
  8. Spring-Lifecycle接口
  9. 【转】记使用Kali linux 2.0的一些坑
  10. 李飞飞离职Google重返斯坦福,CMU计算机学院院长Andrew Moore接任
  11. 微软MED-V虚拟化实战教程之二映像准备和测试
  12. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
  13. oppor829t如何刷机_科普OPPO R1 R829T的线刷教程及最简单的三星手机刷机教程
  14. PHP编译安装常见错误解决
  15. css练习-小米官网首页静态页面制作
  16. 微型计算机的什么接口主要作为打印机接口,微机接口技术及应用_习题集(含答案)...
  17. c语言难学吗?怎么学C语言?
  18. word中图片变为灰度图像 黑白图像 黑白图片
  19. 易基因 | DNA甲基化测序新技术发布:扩展重亚硫酸盐测序(XRBS)
  20. c语言课程设计之简易计算器,简易计算器课程设计 帮忙写简单计算器课程设计...

热门文章

  1. JAVA中public protected default private访问权限
  2. 在 windows 下安装 Boost 1.62.0
  3. idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法
  4. Java中迭代Map的方法
  5. 如何在github用git Pages上传自己在本地做的项目?
  6. ubuntu 14.04 32bit依赖库解决
  7. 【Python】Webpy
  8. 如何解决NDK toolchains出现ABI mips64el-linux-android无法编译问题
  9. C C++如何获取当前系统时间
  10. python 翻译代码_python写的翻译代码