栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String、StringBuffer、StringBuilder三者的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850269.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号