String,StringBuffer,StringBuilder三者的区别

String,StringBuffer,StringBuilder三者的区别

1、 String

String为标准的字符串常量,String对象底层为char类型数组,且对象一经创建就不能更改,由final修饰,如图:

 

 

String做字符串拼接的时候效率很低,例如:

String str = "ab";

str = str + "cd";

速度慢的原因:

对于这段代码,JVM的处理方式是 第一行代码创建了名为str的String对象,并赋值为“ab”,第二行代码JVM再次创建了一个名为str的新对象,并把原来的str和"cd"加起来赋值给他,然后JVM会GC掉第一个str对象,所以String对象做字符串拼接,实际上是一个不断创建并回收对象的过程,非常影响速度性能。

 

2、 StringBuilder

StringBuilder 继承自 AbstractStringBuilder,相当于在String 类的基础上新增封装了很多针对字符串值操作的方法,并且,底层的char类型数组不再声明为final类型,如图:

 

                                 底层数据结构未用final修饰

 

 

3、 StringBuffer

StringBuffer同样继承自 继承自 AbstractStringBuilder,结构与StringBuilder相似,不同的是在针对字符串操作并且需要线程安全的方法都以Synchronizated修饰

所以他是线程安全的,但他也因此比StringBuilder速度慢。如图:

                    synchronized修饰 线程安全

 

正常情况下字符串操作的速度是StringBuilder > StringBuffer > String

所以建议:

1、在字符串操作较少是,使用String

2、线程安全的情况下,使用StringBuilder,速度较快

3、非线程安全的情况下,使用StringBuffer

 

转载于:https://www.cnblogs.com/msqz/p/8436147.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值