java的StringBuffer类和StringBuilder类



StringBuffer

StringBuffer简介

StringBuffer对象是一个字符序列可变的字符串(String类不可变)。它和StringBuilder类似,但是StringBuffer是线程安全的(应用于多线程不会冲突)。
和String一样,StringBuffer类也是一个final类

如果需要频繁的改变字符串的内容,就应该选择StringBuffer类或者StringBuilder类。因为这2个类只会在字符缓冲区容量满的时候,才会重新开辟内存空间



StringBuffer类的继承关系

StringBuffer类直接实现了两个接口:Serializable、Comparable。StringBuffer又继承了AbstractStringBuilder类AbstractStringBuilder类实现了CharSequence接口和Appendable接口(也就是StringBuffer间接实现了这2个接口,一共实现了4个接口)。

继承关系图为
在这里插入图片描述



StringBuffer类的底层实现

和String类类似,StringBuffer类也是通过byte[]数组存储可变字符序列。因此StringBuffer对象存储的每个字符也占1个字节
和String类不同的是,StringBuffer类的byte[]数组没用final修饰。



创建StringBuffer对象

介绍常用构造器:

  1. public StringBuffer(); 创建一个字符序列为空的字符缓冲区,初始容量为16个字符。
  2. public StringBuffer(int capacity); 创建一个不带字符,但具有指定初始容量的字符串缓冲区。
  3. public StringBuffer(String str); 创建一个字符串缓冲区,其字符序列为指定的字符串参数。缓冲区初始容量为16+字符串参数的长度。 如果str = null,会抛出NullPointerException异常。


StringBuffer类的常用方法

  1. public StringBuffer append(String str); 把指定的字符串加到此字符序列的末尾。如果str = null,就把null转换为"null"存储进StringBuffer。
  2. public int capacity(); 返回缓冲区当前容量。
  3. public char charAt(int index); 返回字符序列指定索引位置的字符。
  4. public int indexOf(String str); 返回第一次出现相同值的子字符串的首字符索引。
  5. public StringBuffer delete(int start, int end); 移除[start, end)中的字符,并返回该字符串。
  6. public StringBuffer replace(int start, int end, String str); 用传入的字符串替换指定位置部分[start, end)的子字符串。
  7. public StringBuffer insert(int offset, Object obj); 将Object参数存储的字符串插入到字符序列中,从offset位置前开始插入。
  8. public int length(); 返回字符序列的字符长度。


StringBuilder

StringBuilder简介

StringBuilder和StringBuffer的用途几乎是一样的。只是StringBuilder在多线程中不安全,但效率比StringBuffer更高

StringBuilder和StringBuffer很很多相似点,比如都是final类,继承体系都一样,底层都是用byte[]数组存储字符序列。

可以这样理解:如果是单线程环境就首选StringBuilder,这样效率更高;多线程就选StringBuffer,保证同步。



猜你喜欢

转载自blog.csdn.net/qq_983030560/article/details/132129932