拼接字符串,大致有3个class可以用,他们是String, StringBuffer,StringBuilder, StringBuilder是1.5中来代替StringBuffer的。检验方法如下:

    public class test {   

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long n = 30000;
System.out.println("Start... "+n); long start1 = System.currentTimeMillis();
String s1 = new String("hello");
for (long i = 0; i < n; i++)
{
s1+="拼接字符串的时间";
}
long end1 = System.currentTimeMillis();
long time1 = end1 -start1;
System.out.println("用String+=拼接字符串的时间"+time1); long start2 = System.currentTimeMillis();
String s2 = new String("hello");
for (long i = 0; i < n; i++)
{
s2=s2+"拼接字符串的时间";
}
long end2 = System.currentTimeMillis();
long time2 = end2 -start2;
System.out.println("用String=String+拼接字符串的时间"+time2); long start3 = System.currentTimeMillis();
String s3 = new String("hello");
for (long i = 0; i < n; i++)
{
s3=s3.concat("拼接字符串的时间");
}
long end3 = System.currentTimeMillis();
long time3 = end3 -start3;
System.out.println("用String.concat拼接字符串的时间"+time3); long start4 = System.currentTimeMillis();
StringBuffer s4 = new StringBuffer("hello");
for (long i = 0; i < n; i++)
{
s4.append("拼接字符串的时间");
}
long end4 = System.currentTimeMillis();
long time4 = end4 -start4;
System.out.println("用StringBuffer.append拼接字符串的时间"+time4); long start5 = System.currentTimeMillis();
StringBuilder s5 = new StringBuilder("hello");
for (long i = 0; i < n; i++)
{
s5.append("拼接字符串的时间");
}
long end5 = System.currentTimeMillis();
long time5 = end5 -start5;
System.out.println("用StringBuilder.append拼接字符串的时间"+time5); System.out.println("End...");
} }

贴出一组检测数据如下:

    Start... 30000
用String+=拼接字符串的时间27468
用String=String+拼接字符串的时间25813
用String.concat拼接字符串的时间12265
用StringBuffer.append拼接字符串的时间14
用StringBuilder.append拼接字符串的时间8
End...

1、String类本身是final类型,字符串拼接时,会使用StringBuffer,并调用append,之后再调用toString方法。而StringBuffer转换成String时,开销相当大。中间不仅创立了临时对象StringBuffer,还每次完后再要转成String。

2、在做字符串连接时,String类的concat方法优于+号。 ( String += ) 与 ( String = String + ) 相率相当。

3、而
StringBuilder的出现就是用来替换StringBuffer的,但不适宜于多线程编程。从这点儿上来说,StringBuilder
在单线程编程情况下应优先于StringBuffer使用,而在多线程编程时则应使用StringBuffer,不宜使用StringBuilder 。

4、单线程情况下做字符串连接,StringBuilder.append 与 StringBuffer.append 效率相当。

文章转载自:http://blog.csdn.net/amork/article/details/4307072   谢谢 amork 的分享

java 几种拼接字符串的效率问题的更多相关文章

  1. 谈JavaScript组合拼接字符串的效率 --转载

    JavaScript组合拼接字符串的效率.在脚本开发过程中,经常会按照某个规则,组合拼接出一个大字符串进行输出.比如写脚本控件时控制整个控件的外观的HTML标签输出,比如AJAX里得到服务器端的回传值 ...

  2. java String 中用"+"拼接字符串的原理

    之前看<thinkinjava>时记得书上分析国这个问题,然后面试的时候问道了,结果面试官说时的很含糊说是new了一个对象,我说底层用的Stringbuild.他还是说我说错了.谨以此文的 ...

  3. java中后端拼接字符串返回前台页面换行显示

    后端拼接时用:"\n"分割,比如: String str = "白日依山尽,\n" + "黄河入海流:"; 返回前台页面时,放入 <p ...

  4. c++拼接字符串效率比较(+=、append、stringstream、sprintf)

    转自:http://www.cnblogs.com/james6176/p/3222671.html c++拼接字符串效率比较(+=.append.stringstream.sprintf) 最近写的 ...

  5. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  6. 【转】Java 5种字符串拼接方式性能比较。

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

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

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

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

    http://blog.csdn.net/kimsoft/article/details/3353849 import java.util.ArrayList; import java.util.Li ...

  9. Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740

    Different ways to concatenate two strings in Golang - GeeksforGeeks https://www.geeksforgeeks.org/di ...

随机推荐

  1. [POI2007]天然气管道Gaz

    Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需要将中转站和天然气井连接起来.每个中转站必须被连接到正好一个钻油井,反之亦然. Ma ...

  2. 数据结构RMQ

    RMQ算法介绍 RMQ算法全称为(Range Minimum/Maximum Query)意思是给你一个长度为n的数组A,求出给定区间的最值的下标.当然我们可以采用枚举,但是我们也可以使用线段树来优化 ...

  3. Tree POJ - 174

    点分模板题 都快改的跟题解一模一样了2333333 #include<cstdio> #include<cstring> #include<algorithm> u ...

  4. Spring中bean的五个作用域简介(转载)

    Spring上个版本的IoC容器支持两个不同的bean作用域(单例与原型).Spring 2.0改进了这一点,不仅提供了一些依赖于Spring部署环境(比如说,在web环境中的request和sess ...

  5. Java编码格式

    简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Jav ...

  6. Linux之测试服务器和端口连通

    目录 wget工具 telnet工具 ssh工具 wget工具: 该工具是网络自动下载工具,如果linux或centos中不存在,需要先安装,支持http.https.ftp协议,wget名称的由来是 ...

  7. 【数据分析 R语言实战】学习笔记 第三章 数据预处理 (下)

    3.3缺失值处理 R中缺失值以NA表示,判断数据是否存在缺失值的函数有两个,最基本的函数是is.na()它可以应用于向量.数据框等多种对象,返回逻辑值. > attach(data) The f ...

  8. sql server 中引號嵌套

    在SQL字符串是以单引号作为分界符的,在字符串前面和后面各一个单引号.但是字符串中也能包含单引号,为了使语法分析器能够区分字符串中的单引号还是分界符.规定当字符串中出现单引号时,在其前面添加一个单引号 ...

  9. AndroidStudio启动App时,数据取不到。

    最近在用AndroidStudio开发App的时候,所连的服务器如果是换成本机上的,那么启动App的时候数据就读取不出来,连其它电脑上的服务器就是正常的,如下: 05-11 09:36:57.178 ...

  10. LOL喷子专用自动骂人工具,2018更新完整版!

    软件截图 软件说明: 先进入游戏 打开程序 Z开启/C关闭 下载地址:密码 yjnm