StringBuffer和String速度

在公司看到了一段代码:

    

StringBuilder logStr = new StringBuilder("merID=")
				.append(accountReqBean.getMerId()).append(",merDate=")
				.append(accountReqBean.getMerDate()).append(",merOrdId=")
				.append(accountReqBean.getMerOrdId()).append(",orgId=")
				.append(accountReqBean.getOrgId()).append(",orgUserId=")
				.append(accountReqBean.getOrgUserId()).append(",transType=")
				.append(accountReqBean.getTransType()).append(",transSubType=")
				.append(accountReqBean.getTransSubType()).append(",keepAmt=")
				.append(accountReqBean.getKeepAmt()).append(";");
      我们都知道StringBuffer在字符串拼接上是比String要快的。但是这种形式的append,我感觉应该是不会加快多少速度的,因为这种形式的拼接,理论上来上说,是和 new String效率是一样的。

举例来说:

String s=new String("1"+"2") 和

StringBuffer s=new StringBuffer().append("1").append("2");

速度应该是一样的,因为他可能是直接把拼接当作了new String(“12”)这种形式申明。 

所以今天做个测试:上代码

public static void main(String[] args) {
		Long saveTime=System.currentTimeMillis();
		String testString = "";
		for (int i = 0; i < 999; i++) {
			testString=testString+"添加文本ABCD";
		}
		System.out.println("String所用时间:"+(System.currentTimeMillis()-saveTime));
		
		
       saveTime=System.currentTimeMillis();
	   StringBuffer buffer = new StringBuffer();
	   for (int i = 0; i < 999; i++) {
	   buffer=buffer.append("添加文本ABCD");
	   }
	   System.err.println("StringBuffer所用时间:"+(System.currentTimeMillis()-saveTime));
					
			
	
	  
	    saveTime=System.currentTimeMillis();
	    testString = "添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD"+"添加文本ABCD";//博客上版面原因,省略后面的900多次拼接,实际上是很长的,我代码拼接的

		System.out.println("String单行拼接:"+(System.currentTimeMillis()-saveTime));

		saveTime=System.currentTimeMillis();
		buffer = new StringBuffer().append("添加文本ABCD").append("添加文本ABCD").append("添加文本ABCD").append("添加文本ABCD");//博客上版面原因,省略后面的900多次拼接,实际上是很长的,我代码拼接的
		System.err.println("StringBuffer单行拼接:"+(System.currentTimeMillis()-saveTime));
	}
结果是:

String所用时间:12
StringBuffer所用时间:0
String单行拼接:0
StringBuffer单行拼接:0

so,结果如我所想。

单行拼接。String和StringBuffer速度上是一样的。

关于为什么String 和StringBuffer 循环拼接速度不一致是因为String 用+拼接的时候,是在不断地新创建一个String空间去保存新+的字符串,也就是每次+后的新字符串实际上和以前那个字符串在虚拟机角度不是一个空间的,这样不断申请新的空间,肯定会比较慢,而且会耗。但是StringBuffer的Buffer是缓冲区的意思,也就是说可以理解为将String放入一个缓冲区或者一个可变的空间中,在这个区域内不断appedn改变字符串不用新申请空间。等你确定好了,直接toString输出就好了。这就是为什么速度会有区别

而StringBuffer 和StringBuilder的区别是builder是线程不安全的,Buffer线程安全。而为了线程安全,StringBuffer速度回避StringBuilder 慢上一些



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值