java使用“+“,concat和StringBuilder、StringBuffer拼接字符串性能对比

结论:StringBuilder > StringBuffer > concat > "+"  原因如下:

1.使用"+"拼接:

首先来看这段代码干了什么事,通过javap得出步骤如下:

我们需要了解的是,str += "A"到底做了什么事情?由上图可知

1. 创建StringBuilder对象

2.StringBuilder对象执行append(str)

3.StringBuilder对象执行append("A")

4.StringBuilder对象执行toString(),并将结果赋值给了str

结论:str += "A" 等同于 str = new StringBuilder().append(str).append("A").toString()

也就是说,每执行一次str += "A" ,堆内存中便会创建一个StringBuilder对象,并且常量池中增加一个字符串(A,AA,AAA,AAAA...)

 

2.使用concat拼接字符串

首先我们再来看一下这段代码干了什么?

此时我们轻易可知,str = str.concat("A") 干了什么事

1.str.concat("A")生成了一个新字符串

2.将该字符串赋值给了str

也就是说,每执行一次str = str.concat("A") , 便会在字符串常量池中增加一个字符串(A, AA, AAA...)

 

3.使用StringBuilder拼接字符串

首先我们来看一下这段代码做了什么事?

由上图可知,至始至终都只有1个StringBuilder对象,并且没有一直向字符串常量池中添加字符串,只有当执行toString方法后,才会将添加进字符串常量池。

 

4.使用StringBuffer拼接

StringBuffer只是在公开方法加了synchronized获取排他锁,保证线程同步,其他实现和StringBuilder差不太多,性能相较StringBuilder也低一些

 

 

 

 

 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值