Java字符串拼接之String、StringBuffer和StringBuilder的性能

Java字符串拼接之String、StringBuffer和StringBuilder的性能

作者:谢景,撰写:2019-4-16

在c#中,字符串拼接是利用+号运算符重载实现的,但是在Java中虽然+号运算符也能实现字符串拼接,但是性能差。
下面介绍一下关于字符的相关的类。

  • String 类对象不可变,一旦修改 String的值就是隐形的重建了一个新的对象,释 放了原 String对象
例如:String str=str+"a";
相当于  先声明一个新的String:String str1=new String(str+"a");
       然后再将新的String赋值给旧的str:str=str1;
  • StringBuffer和StringBuilder类是可以通过append()、insert()、reverse()…等方法 来修改值。创建的对象是可变
  • StringBuffer:线程安全的; StringBuilder:线程非安全的
  • 字符串连接 String 的 + 比 StringBuffer(StringBuilder) 的 Append() 性能差了很多
  • 三者在执行速度方面的比较:StringBuilder > StringBuffer > String

下面通过代码实践来验证一下上面的结论:

public static void ddd(){	
	//-----------------String-----------------------
	String string=new String("");
	Date date=new Date();//循环前声明一个实例化当前时间
	for (int i = 0; i < 10000; i++) {
		string+="1";
	}
	Date date1=new Date();//循环后声明再一个实例化当前时间
	//获取后面的时间减去前面的时间的值
	System.out.println("String: "+(date1.getTime()-date.getTime()));
	//-----------------StringBuffer-----------------------
	StringBuffer buffer=new StringBuffer("");
	Date date2=new Date();//循环前声明一个实例化当前时间
	for (int i = 0; i < 10000; i++) {
		buffer.append("1");//StringBuffer、StringBuilder不能用+号运算符拼接字符
	}
	Date date3=new Date();//循环后声明再一个实例化当前时间
	//获取后面的时间减去前面的时间的值
	System.out.println("StringBuffer: "+(date3.getTime()-date2.getTime()));
}

结果如下图:
在这里插入图片描述
上图证明StringBuffer 比String拼接字符执行速度快很多,
又因为 StringBuffer:线程安全的; StringBuilder:线程非安全的
线程安全是已消耗速率为代价的,由此可以证明:
三者在执行速度方面的比较:StringBuilder > StringBuffer > String

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值