当我们需要对字符串进行拼接时,我们首先想到的是最简单直观的String中的+=,但是,这种方式是不是最优的呢,如果是在次数很多的循环中呢?于是探究了java中字符串拼接的四种方法,比较了一下他们的利弊关系。
下面是测试的代码:
public class StringJoint {
private int count = 50000;
public void direct(){
//直接拼接字符串
long start = System.currentTimeMillis();
String s = "";
for(int i=0;i<count;i++){
s =s+"a";
}
long end = System.currentTimeMillis();
System.out.println("拼接 "+count+" 次");
System.out.println("直接拼接用时:"+(end-start));
}
public void concat(){
//Concat拼接字符串
long start = System.currentTimeMillis();
String sConcat = "";
for(int i=0;i<count;i++){
sConcat =sConcat.concat("a");
}
long end = System.currentTimeMillis();
System.out.println("Concat用时:"+(end-start));
}
public void stringBurrer(){
//StringBuffer拼接字符串
long start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for(int i=0;i<count;i++){
sb.append("a");
}
long end = System.currentTimeMillis();
System.out.println("StringBuffer用时:"+(end-start));
}
public void stringBuilder(){
//StringBuilder拼接字符串
long start = System.currentTimeMillis();
StringBuilder sBulider = new StringBuilder();
for(int i=0;i<count;i++){
sBulider.append("a");
}
long end = System.currentTimeMillis();
System.out.println("StringBuilder用时:"+(end-start));
}
public static void main(String[] args) {
StringJoint sj =new StringJoint();
sj.direct();
sj.concat();
sj.stringBurrer();
sj.stringBuilder();
}
}
运行结果:
拼接 50000 次
直接拼接用时:1575
Concat用时:788
StringBuffer用时:3
StringBuilder用时:2
以上结果单位是毫秒,从运行结果我们得到以下心得:
1.String简单实用可观,String的+本来就是用StringBuilder或StringBuffer和他们的append()方法实现的,关键是不是同一个StringBuilder/StringBuffer。因为String是一个常类(初始化后就不会改变的类),在循环里用+=之类的方式来拼接字符串的问题就出在每轮循环里都new了一个StringBuilder/StringBuffer来做拼接,然后toString()完就抛弃了,等下轮循环进来又再new一个。
2.concat是内部机制实现,比+的方式好了不少,但是由于额外的创建StringBuilder和
做append(str).append(str).toString()的操作,使得concat的性能会受到一些影响
3.StringBuilder的出现就是用来替换StringBuffer的,StringBuilder的速度最快,但其有线程安全的问题,而且只有JDK5支持。
因此我们在做简单少量的字符串拼接时,可以使用String或者concat来实现,当需要大量的字符串拼接(特别是在循环中),且在不考虑线程安全和同步的情况下,使StringBuilder和StringBuffer的性能最优。
分享到:
相关推荐
浅谈java中的几种随机数,浅谈java中的几种随机数,浅谈java中的几种随机数,浅谈java中的几种随机数
浅谈Java中Mysql数据库的连接与操作.pdf
浅谈Java中的几种随机数
浅谈Java字符串Java开发Java经验技巧共11页.pdf.zip
浅谈Java字符串编程开发技术共3页.pdf.zip
浅谈Java优势,关于java优势......
下面小编就为大家带来一篇浅谈java 字符串,字符数组,list间的转化。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
浅谈Java软件测试.pdf
主要介绍了浅谈java中字符串数组、字符串、整形之间的转换,具有一定参考价值,需要的朋友可以了解下。
在JavaScript中会经常遇到字符串拼接,但是如果要拼接的字符串过长就比较麻烦了。 如果在一行的话,可读性太差;如果换行的话,会直接报错。 现在就来介绍几个JavaScript拼接字符串的几个小技巧(主要针对字符串过长...
浅谈JAVA中多线程的实现
浅谈Java中的equals和==Java开发Java经验技巧共6页.pdf.zip
浅谈Java中的变量.pdf
浅谈Java中方法的参数传值.pdf
浅谈Java串行端口技术协议 浅谈JAVA串行端口技术协议 1 一、串行通讯慨述 2 二、RS232通讯基础 2 三、常见的边线方式 2 四、小技巧:如何辨别TXD和RXD端口? 3 五、安装JAVA COMMUNICATIONS API 3 六、通讯前的准备...
浅谈Java的输入输出流.pdf 浅谈Java的输入输出流.pdf