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

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

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

public class TestClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		testString();
	}
	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耗时:3ms
String.concat()耗时:0ms
StringBuffer.append()耗时:0ms
StringBuilder.append()耗时:0ms


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

String+=s耗时:71ms
String.concat()耗时:1ms
StringBuffer.append()耗时:1ms
StringBuilder.append()耗时:1ms


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

String+=s耗时:13250ms
String.concat()耗时:7ms
StringBuffer.append()耗时:4ms
StringBuilder.append()耗时:3ms

 

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

参考资料:

http://www.vincentli.top/2016/10/21/string-stringbuilder-stringbuffer-run-efficiency-compare/

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值