String,StringBuffer,StringBuilder拼接操作的效率对比

来源:互联网 发布:重庆网络口碑营销 编辑:程序博客网 时间:2024/04/30 04:28

       有很多时候,会有大量的字符串的拼接操作,但是我们很多coder,尤其是刚入职场的年轻coder,使用的方式可能就是String str +=s;而且我翻我自己所参与的项目里面的以前很久的代码也有大量的这种写法,但是很少有人知道,这种写法在操作基数很大的时候效率还是很低下的。少说废话,先上代码吧。

       当字符串拼接操作次数在1000的级别时,效率差异不是很大的。

public class TestClient {/** * @param args */public static void main(String[] args) throws Exception{// TODO Auto-generated method stubtestString();}private static void testString()throws Exception{///1.str+=s的方式。String str= "";String s ="a";long start = System.currentTimeMillis();for(int i=0; i < 1000;i++){str+=s;}long end = System.currentTimeMillis();System.out.println("String+=s耗时:"+(end-start)+"ms");///2.String.concat()方式long start1 = System.currentTimeMillis();String str1= "";for(int i=0; i < 1000;i++){str1.concat(s);}long end1 = System.currentTimeMillis();System.out.println("String.concat()耗时:"+(end1-start1)+"ms");///3.StringBuffer.append()方式long start2 = System.currentTimeMillis();StringBuffer str2= new StringBuffer();for(int i=0; i < 1000;i++){str2.append(s);}long end2 = System.currentTimeMillis();System.out.println("StringBuffer.append()耗时:"+(end2-start2)+"ms");////4.StringBuilder.append()方式long start3 = System.currentTimeMillis();StringBuilder str3= new StringBuilder();for(int i=0; i < 1000;i++){str3.append(s);}long end3 = System.currentTimeMillis();System.out.println("StringBuilder.append()耗时:"+(end3-start3) +"ms");///////////////////////////////////////////////////////} 
运行程序的结果:

String+=s耗时:3msString.concat()耗时:0msStringBuffer.append()耗时:0msStringBuilder.append()耗时:0ms

当操作的次数上升到10000的时候有如何呢?

String+=s耗时:71msString.concat()耗时:1msStringBuffer.append()耗时:1msStringBuilder.append()耗时:1ms

当操作上升到100000的时候有如何呢?

String+=s耗时:13250msString.concat()耗时:7msStringBuffer.append()耗时:4msStringBuilder.append()耗时:3ms


结果总是那么让人惊艳。很显然StringBuilder和StringBuffer的append()方式效率更高,String的concat()的方法效率也还可以的。那为什么String的+=s的操作方式效率会那么低呢?那是因为这种方式会不停的创建新的String对象,这样会浪费不少内存空间,而且效率也不高。所以我们一般处理少量操作的时候建议用String的concat()方法就可以了。遇到大量拼接操作的时候建议还是用StringBuffer,StringBuilder的append()的方法。








0 0
原创粉丝点击