前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[十四]基础类型之StringBuffer 与 StringBuilder对比

[十四]基础类型之StringBuffer 与 StringBuilder对比

作者头像
noteless
发布2018-12-04 10:05:04
4380
发布2018-12-04 10:05:04
举报
文章被收录于专栏:notelessnoteless

StringBuilder 和 StringBuffer是高度类似的两个类

StringBuilder是StringBuffer的版本改写,下面从几个方面简单的对比下他们的区别

类继承关系

上文中,我们简单介绍了AbstractStringBuilder

他是可变的字符序列的抽象模型,定义了可变字符序列的公共行为

它是一个抽象类,针对一些操作提供了默认的实现

StringBuilder 和 StringBuffer 都是可变字符序列

所以他们都实现了AbstractStringBuilder

image_5bd264bb_7d96
image_5bd264bb_7d96

方法体系

他们除了实现了AbstractStringBuilder  和 CharSequence外

实际上他们没有自己的方法

所有的方法都来自AbstractStringBuilder  和 CharSequence

image_5bd264bc_328c
image_5bd264bc_328c

从上图看得出来,构造方法的方法签名----方法参数的个数和类型都是一样的

其实, 他们就是一样的,初始容量等

image_5bd264bc_22ea
image_5bd264bc_22ea

线程安全

StringBuffer是线程安全的

StringBuilder是非线程安全的

其实线程安全也就是方法前面增加了一个synchronized关键字

比如下面的几个方法

toStringCache

StringBuffer中有一个toStringCache 就像它的名字一样,toString()方法的cache

简言之就是缓存toString方法

每次调用toString会检查这个字段,如果不为null将会使用它进行对象创建

如果为null  将会给他初始化赋值,也就是缓存

当调用其他的任何方法改变StringBuffer时,就会把toStringCache进行清空

比如下面截图方法setCharAt append

如果每次都是更改变动后调用,显然,还适得其反的浪费了性能

如果多次调用toString将会得到好处

image_5bd264bc_4681
image_5bd264bc_4681

总结

两个类的功能逻辑上来说基本一样,都是可变的字符序列

代码的相似度也很高

他们本身就是为了做同一件事情

只不过是各自的侧重点不同

他们都实现了AbstractStringBuilder和CharSequence

他们的方法都来自于这两个类

只不过StringBuffer是线程安全的,StringBuilder非线程安全

其实 早在1.0版本StringBuffer 就已经存在了

StringBuffer则是在1.5才加入进来的,AbstractStringBuilder 也是在1.5加入进来

StringBuilder  就是 StringBuffer的一个非线程安全的实现

AbstractStringBuilder 也是后来才对类的设计进行抽象升华的

StringBuffer才实现了这个类

他们的源代码也大多数是雷同的

主要差异就在于以下三点

StringBuffer覆盖的方法略微多一点

StringBuffer 在方法上增加了synchronized关键字用于同步,亦或者应该说,StringBuilder去掉了synchronized

StringBuffer的toStringCache缓存

如果去掉这三点,这两份代码就几乎是一样的了

除非你的确非常确信你需要使用StringBuffer

否则,如果不可变使用String 

如果可变使用StringBuilder ,尽可能的放弃StringBuffer 吧

总结起来就一句话

StringBuilder是StringBuffer的非同步版本就是版本改写

能用StringBuilder就不要用StringBuffer。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-10-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类继承关系
  • 方法体系
  • 线程安全
  • toStringCache
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档