Java字符串连接的性能问题

Java中使用+作为字符串连接符,它是把多个字符串合并成一个字符串的方便途径。对于单独一行的输出、或者较小的大小固定对象,使用连接符方便且合适。但是对于大规模的场景,字符串连接符变得有些不合时宜。

以连接N个字符串为列,重复的使用字符串连接符需要N的平方的时间量,最主要的原因是String类是不可变类导致的,即当连接两个字符串时,它们的内容都要存在一次拷贝。每一次连接,原有的两个字符串对象都不变,连接后的结果是一个新生成的对象。这种方式,不仅时间需求很大,而且对内存的要求也非常高。

如果拼接的字符串很多,使用字符串连接符的计算时间和对性能的消耗变得难以估算。为了使性能在接受范围内,可以使用StringBuilder替代String,来连接字符串。

以下是两种方式的测试代码:

<span style="font-size:18px;">public static void main(String[] args) {
		
		long start1 = System.currentTimeMillis();
		String result1 ="";
		for(int i = 0 ; i < 50000;i++){
			result1 += String.valueOf(i);
		}
		long end1 = System.currentTimeMillis();
		System.out.println("String Connect Time:"+(end1-start1)+"ms");
		
		long start2 = System.currentTimeMillis();
		StringBuilder result2 = new StringBuilder();
		for(int i = 0 ; i < 50000;i++){
			result2.append(i);
		}
		long end2 = System.currentTimeMillis();
		System.out.println("StringBulider Connect Time:"+(end2-start2)+"ms");
	}</span>

这两中做法的差距非常大,我所做的测试中,第二种做法要比第一种做法高4到5个数量级。随着连接数目的增多,两种方式的性能差距也更加明显。

总结一下:不要使用字符串连接符来连接多个字符串,除非系统对性能无要求。还有一点是,可以使用字符数组,或者每次只处理一个字符串,而不是将他们组合起来。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值