[十四]基础类型之StringBuffer 与 StringBuilder对比
2018-10-26 08:57
447 查看
StringBuilder 和 StringBuffer是高度类似的两个类
StringBuilder是StringBuffer的版本改写,下面从几个方面简单的对比下他们的区别
类继承关系
上文中,我们简单介绍了AbstractStringBuilder 他是可变的字符序列的抽象模型,定义了可变字符序列的公共行为 它是一个抽象类,针对一些操作提供了默认的实现 StringBuilder 和 StringBuffer 都是可变字符序列 所以他们都实现了AbstractStringBuilder方法体系
他们除了实现了AbstractStringBuilder 和 CharSequence外 实际上他们没有自己的方法 所有的方法都来自AbstractStringBuilder 和 CharSequence 从上图看得出来,构造方法的方法签名----方法参数的个数和类型都是一样的 其实, 他们就是一样的,初始容量等线程安全
StringBuffer是线程安全的 StringBuilder是非线程安全的 其实线程安全也就是方法前面增加了一个synchronized关键字 比如下面的几个方法
toStringCache
StringBuffer中有一个toStringCache 就像它的名字一样,toString()方法的cache 简言之就是缓存toString方法的 每次调用toString会检查这个字段,如果不为null将会使用它进行对象创建 如果为null 将会给他初始化赋值,也就是缓存 当调用其他的任何方法改变StringBuffer时,就会把toStringCache进行清空 比如下面截图方法setCharAt append 如果每次都是更改变动后调用,显然,还适得其反的浪费了性能 如果多次调用toString将会得到好处总结
两个类的功能逻辑上来说基本一样,都是可变的字符序列 代码的相似度也很高 他们本身就是为了做同一件事情 只不过是各自的侧重点不同 他们都实现了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。相关文章推荐
- JAVA基础学习之String、StringBuffer、StringBuilder、基本数据类型的使用、整形进制转换、集合Collection、Vector、ArrayList、LinkedList、HashSet、TreeSet等(3)
- java基础类型String、StringBuffer、StringBuilder
- 十四、Java基础---------String、StringBuffer、StringBuilder基本应用
- 【黑马程序员】------java基础----String类、StringBuffer(StringBuilder)、基本数据类型包装类
- java基础知识(15)----StringBuffer与StringBuilder
- string , stringbuilder ,stringbuffer 效率对比
- java基础学习笔记之String、StringBuffer、StringBuilder
- 黑马程序员_String类及StringBuffer和StringBuilder概述和功能、基本数据类型
- StringBuffer,StringBuilder,数组常见操作,Arrays,基本类型包装类--1
- java学习第25天,学习stringBuilder,stringBuffer,基础的正则,matches()
- Java基础1(String StringBuilder StringBuffer 三者区别)
- String、StringBuffer和StringBuilder的性能对比
- java语言基础入门——String、StringBuffer、StringBuilder的比较
- String—03—StringBuffer、StringBuilder、基本数类型
- Java基础之String,StringBuilder,StringBuffer
- java基础:StringBuilder与StringBuffer的区别
- String,StringBuffer,StringBuilder对比
- 温故而知新(五)java基础:String、StringBuffer 、StringBuilder
- 【Java基础】StringBuffer 和 StringBuilder 类
- Java基础之String,StringBuffer与StringBuilder的区别及应用场景