JAVA 知识回顾之StringBuffer 和 StringBuilder

StringBuffer

StringBuffer 简称字符串缓冲区,线程安全的可变字符序列。 StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。

要点

  • StringBuffer 上的主要操作是 append 和 insert 方法,它们都用于添加字符。不同的是,append() 方法始终将这些字符添加到缓冲区的末尾,而insert() 方法则可以在指定的位置添加字符。
  • 每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。
线程安全原因

JAVA 知识回顾之StringBuffer 和 StringBuilder_第1张图片
从源码分析看,StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的

常用方法

  1. StringBuffer append(char c)
    添加参数到StringBuffer 对象中
  2. StringBuffer insert(int offset,String str)
    将字符串中的offset位置插入字符串str
  3. StringBuffer deleteCharAt(int index)
    移除此序列指定位置的字符
  4. StringBuffer delete(int start,int end)
    删除StringBuffer对象中指定范围的字符或字符串序列
  5. StringBuffer replace(int start,int end,String s)
    在StringBuffer对象中替换指定的字符或字符串序列
  6. StringBuffer reverse()
    将此字符序列用其反转形式取代

StringBuilder

StringBuilder是一个可变的字符序列,是JDK5.0新增的。它是非线程安全的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。

要点

同上

常用方法

同上

非线程安全原因

JAVA 知识回顾之StringBuffer 和 StringBuilder_第2张图片
从源码分析看,StringBuilder 类的方法没有加同步锁,在多线程情况下,它是不安全的

总结

  • StringBuffer 是线程安全的可变字符序列,用于多线程的情况下;StringBuilder是非线程安全的可变字符序列,用于单线程的情况下.
  • 相同情况下使用 StringBuilder 相比使用 StringBuffer 性能较高
  • 为了获得更好的性能,在构造 StringBuffer 或 StringBuilder 时应尽可能指定它们的容量,如果你操作的字符串长度(length)不超过 16 个字符就不用了,当不指定容量(capacity)时默认构造一个容量为16的对象。

你可能感兴趣的:(Java语言)