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

代码如下:

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());@Testpublic 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);}@Testpublic 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);}@Testpublic 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);}@Testpublic 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);}@Testpublic 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支持。

转载于:https://www.cnblogs.com/zhujiabin/p/5028883.html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 如何在Tensorflow.js中处理MNIST图像数据
  2. 如何向mysql表中添加数据类型_java中怎么把data类型的数据添加到数据库?
  3. 10分钟完成一个业务流程的发布
  4. MpVue开发之swiper的使用
  5. 计算广告 pdf_小学生PDF格式的试卷怎么编辑修改
  6. oracle database 12cr2 使用 dbms_stat 采集统计信息
  7. java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)
  8. net core 中间件(MiddleWare)
  9. PartitionAssignor分析
  10. 《自然语言处理简明教程》读书笔记:前言
  11. 珍藏版创业思维导图,帮你成功创业!
  12. 适合WhatsApp网页版的4个最好的免费WhatsApp 群发工具
  13. 港科夜闻丨香港科大团队最新研究:双色发射AIEgen用于无标记特异性识别dsDNA和SNPs检测...
  14. [Python] 网络设备巡检脚本
  15. LICEcap:GIF屏幕录制工具
  16. RTX 4070TI和RTX 4090性能差距 RTX4070ti和4070区别对比
  17. 用delphi编写医院的复杂报表
  18. XAMPP介绍、安装及使用
  19. 一些代码静态检查工具的简介
  20. 群晖synology LDAP server 同步

热门文章

  1. 平板电脑计算机怎么关按键音,平板电脑输入法怎么设置【图解】
  2. 016_泛型常见通配符
  3. 015-图片文件上传
  4. 005-SDK框架之LYWSDKCallBackListener.h
  5. oracle count最快的方法,Oracle count哪种写法更快
  6. jenkins详细设置(二)
  7. php写一个轻量级的容器,PHP写的一个轻量级的DI容器类
  8. php代码冗余度检查插件,冗余代码检测与处理使用什么工具
  9. RxJava 在Android中的应用(一)
  10. 第二篇:mysql_____sql语句语法格式