String、StringBuffer以及StringBuilder的区别

String、StringBuffer以及StringBuilder都是对字符串进行操作,但是他们也有不同。

1、可变性

        String类中是用一个由final修饰的字符数组保存字符串,所以String对象是不可变的。

         StringBuffer以及StringBuilder 都是继承了AbstractStringBuilder类,在类中也是用字符数组存储字符串,但是字符数组并没有用final关键字修饰,所以这两种对象都是可变的。

 

2、线程安全性

        String中的对象是不可变的,也就能理解为字符型常量,常量是线程安全的。

        上文说到,AbstractStringBuilder是StringBuffer和StringBuilder的公共父类,定义了一些针对字符串的基本操作,也就是公共方法。StringBuffer针对这些公共方法或者是对调用的方法加了同步锁,所以是线程安全的。

        

         而StringBuilder并没有加同步锁,所以是线程不安全的。

3、性能

        每一次对String进行操作时,都会生成一个新的String对象,然后指针指向新的String对象。

        StringBuffer每次都是对StringBuffer对象本身进行操作,并不是生成新的对象并改变对象引用。

        StringBuilder相对于StringBuffer来说,性能有10%~15%的提升,但是StringBuilder是线程不安全的。

        所以对于三者的使用总结:

                1、String = 操作量少的数据

                2、StringBuilder = 单线程操作字符串缓冲区下操作大量数据

                3、StringBuffer = 多线程操作字符串缓冲区下操作大量数据

4、总结

        String是不可变的、线程安全的以及适合操作数据量较少的时候使用。

        StringBuffer是可变的、线程安全的以及适合多线程操作大量数据的时候使用。

        StringBuilder是可变的、线程不安全的以及适合单线程操作大量数据的时候使用。

        

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值