String、StringBuffer、StringBuilder三者的区别

在前面的文章中,我们已经分别介绍了String、StringBuffer、StringBuilder三者的基本使用,还不懂String、StringBuffer、StringBuilder这三个类是如何使用的,可以先去看看之前的文章:Java:String类的使用

本文主要是介绍String、StringBuffer、StringBuilder之间的区别。


在前面的文章中,我们知道了String是具有不可变性的,由此我们就引出了可变性的StringBuffer类和StringBuilder类。

实际上,这三者在我们日常写代码的过程中都是会经常使用到的,那么既然其他两个类都是可变的,为什么我们还要使用String类呢?直接全部使用其他两个类不好吗?感觉使用String类有这么多的局限性,不可变对象到底有什么好处呢?

对于这种种的疑问,其实总结出来就是:为什么String要设计成不可变的?
原因有三:

  1. 方便实现字符串对象池,如果String可变,那么对象池就需要考虑写时拷贝的问题
  2. 不可变对象是线程安全的
  3. 不可变对象更方便缓存hashcode,作为key时可以更高效率地保存到HashMap中

那么对于StringBuffer类和StringBuilder类,他们是可以进行修改的,实际上他们的大部分功能也都是相同的,其中,最主要的区别就是:StringBuffer采用了同步处理,属于线程安全的操作;而StringBuilder并未采用同步处理,因此是属于线程不安全操作,这也是这两个类之间最大的区别点(关于线程安全但是知识点到后面学习到了在做解释)。


这时候可能有人会说:StringBuffer既是可修改的,又是线程安全的,那还要String类和StringBuilder类干嘛呢?之间全部使用StringBuffer不就行了吗?

其实String和StringBuilder中有一些其他东西是StringBuffer说不具备的,往往这些都是要通过代码的具体实现来决定的,不能一棒子打死说全部都使用StringBuffer,很显然是不恰当的,String在Java源码中出现的地方比比皆是,只能够说,在实现中写代码比较经常使用的是StringBuffer。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔡欣致

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值