首先,看一段实验程序:

 package com.test;

 class StringTest {

     public static void main(String[] args) {

         long start = 0;
long count = 100000;
String str = "test String contact..";
String result = "";
long s1 = System.currentTimeMillis();
while (start < count) {
result+=str;
start++;
}
long e1 = System.currentTimeMillis();
System.out.println("+ 连接执行时间:");
System.out.println(e1 - s1); start = 0;
str = "test String contact..";
result="";
long s2 = System.currentTimeMillis();
while (start < count) {
result=result.concat(str);
start++;
}
long e2 = System.currentTimeMillis(); System.out.println("contact 连接执行时间:");
System.out.println(e2 - s2); start = 0;
str = "test String contact..";
result="";
StringBuilder sb = new StringBuilder();
long s3 = System.currentTimeMillis();
while (start < count) {
sb.append(str);
start++;
}
long e3 = System.currentTimeMillis(); System.out.println("stringbuild 连接执行时间:");
System.out.println(e3 - s3); start = 0;
str = "test String contact..";
result="";
StringBuffer sbu = new StringBuffer();
long s4 = System.currentTimeMillis();
while (start < count) {
sbu.append(str);
start++;
}
long e4 = System.currentTimeMillis(); System.out.println("stringbuffer 连接执行时间:");
System.out.println(e4 - s4); }
}

上述测试程序的执行结果:

+ 连接执行时间:
156960
contact 连接执行时间:
40896
stringbuild 连接执行时间:
8
stringbuffer 连接执行时间:
7

从结果来看StringBuild连接字符串的效率最高,直接使用加号连接字符串的效率最低。

分析一下上述效率差别之大的原因:
"+"进行字符串连接实际上是在循环内部每次新建StringBuild对象进行字符串的拼接,这样会占用大量内存,jvm内存回收时间不定,导致其执行效率很低;

contact执行过程中也新建了许多内存对象,这是其执行效率低下的主要原因:

  public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}

StringBulid和StringBuffer的执行效率基本一致,综上分析,在大量的字符串拼接处理时,考虑到执行效率,应该使用StringBuild或StringBuffer,尤其是在高并发的场景下性能问题改善尤其明显。

Java字符串连接操作的性能问题的更多相关文章

  1. php大力力 [024节]PHP中的字符串连接操作(2015-08-27)

    2015-08-27 php大力力024.PHP中的字符串连接操作 PHP中的字符串连接操作  阅读:次   时间:2012-03-25 PHP字符串的连接的简单实例 时间:2013-12-30 很多 ...

  2. 【HANA系列】SAP HANA SQL字符串连接操作

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL字符串连 ...

  3. Java字符串连接的多种实现方法及效率对比

    JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...

  4. JavaScript中三种字符串连接方式及其性能比较

    参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...

  5. JS中三种字符串连接方式及其性能比较

    工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法  用连接符“+”把要连接的字符串连起来 ...

  6. JAVA字符串拼接操作规则说明

    1.常量与常量的拼接结果在常量池,原理是编译期优化 public void test1() { String s1 = "a" + "b" + "c& ...

  7. Java字符串连接最佳实践

    一个小问题,分享给大家. + 操作和 StringBuilder 都能连接字符串,使用+来拼接字符串,使用javap命令来反编译代码,可以看出实际上编译器会自动创建StringBuilder,调用它的 ...

  8. SQL语言(二) java怎样连接操作数据库中的数据

    import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...

  9. 【转】Java 字符串常用操作(String类)

    原文网址:http://www.cnblogs.com/freeabyss/archive/2013/05/15/3187057.html 字符串查找 String提供了两种查找字符串的方法,即ind ...

随机推荐

  1. Array.prototype.reduce 的理解与实现

    Array.prototype.reduce 是 JavaScript 中比较实用的一个函数,但是很多人都没有使用过它,因为 reduce 能做的事情其实 forEach 或者 map 函数也能做,而 ...

  2. jQuery复制table header到表格的最下面

    为了让table具有更好的可读性,我们可以将表格的header信息克隆一份到表格的底部,这种特效通过JQuery就很容易实现: 1 2 3 4 5 var $tfoot = $(''); $($('t ...

  3. Java 替换空格

    题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解一: 由于最近在学习Head F ...

  4. Python3中内置类型bytes和str用法及byte和string之间各种编码转换

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str ...

  5. Nginx总结.md

    基本配置 注意:下面的nginx版本是1.10,安装是在CentOS 7中通过epel源进行安装的nginx默认配置文件. # egrep -v "(^$)|(^#)|#" /et ...

  6. 2017-2018-2 20165318 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165318 实验二<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄  ...

  7. 1260. [CQOI2007]涂色【区间DP】

    Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续 ...

  8. windows 下搭建git服务器,及问题处理。

    最近要做一个源码管理服务器,权衡了一下还是git最适合,搭建服务器前看了网上一些windows下搭建git服务器的帖子,感觉还比较简单,没有太多需要配置的地方,于是开始动手. 我选择的是 gitfor ...

  9. django admin自定义

    django admin自定义 class CustomerAdmin(admin.ModelAdmin): list_display = ('id','name','qq','consultant' ...

  10. sqoop数据导入命令 (sql---hdfs)

    mysql------->hdfs sqoop导入数据工作流程: sqoop提交任务到hadoop------>hadoop启动mapreduce------->mapreduce通 ...