5.4 StringBuffer类

5.4.1 StringBuffer类的概念

  StringBuffer类也可以存放字符串。与String类不同的是,StringBuffer字符串代表的是可变的字符序列,可以对字符串对象的内容进行修改。

  以下是StringBuffer类最常用的构造方法。

  • StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。

  • StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

  StringBuffer字符串使用场合为经常需要对字符串内容进行修改操作的场合。

5.4.2 StringBuffer类的使用

  以下是通过StringBuffer类的构造方法创建StringBuffer字符串的代码。

  1. StringBuffer strB1 = new StringBuffer();

  通过strB1.length()返回长度是0,但在底层创建了一个长度为16的字符数组。

  1. StringBuffer strB2 = new StringBuffer("柳海龙");

  通过strB2.length()返回长度是3,在底层创建了一个长度为3+16的字符数组。

  StringBuffer上的主要操作是append和insert方法,将字符追加或插入到字符串缓冲区中。append方法始终将字符添加到缓冲区的末端,而insert方法则在指定的位置添加字符。

  以下是StringBuffer类的常用方法。

  • public StringBuffer append(String str)

  将指定的字符串追加到此字符序列中。

  • public StringBuffer append(StringBuffer str)

  将指定的StringBuffer字符串追加到此序列中。

  • public StringBuffer append(char[] str)

  将字符数组参数的字符串表示形式追加到此序列中。

  • public StringBuffer append(char[] str,int offset,int len)

  将字符数组参数的子数组的字符串表示形式追加到此序列中,从索引offset开始,此字符序列的长度将增加len。

  • public StringBuffer append(double d)

  将double类型参数的字符串表示形式追加到此序列中。

  • public StringBuffer append(Object obj)

  将Object参数的字符串表示形式追加到此序列中。

  • public StringBuffer insert(int offset,String str)

  将字符串插入到此字符序列中,offset表示插入位置。

  下面通过一个案例说明上述StringBuffer类方法的使用,执行下面的程序,运行结果如图5.16所示。

  1. public class TestStringBuffer {
  2. public static void main(String[] args) {
  3. System.out.println("创建StringBuffer对象");
  4. //使用StringBuffer()构造器创建对象
  5. StringBuffer strB1 = new StringBuffer();
  6. System.out.println("new StringBuffer()创建对象的长度为:" + strB1.length());
  7. //使用StringBuffer(String str)构造器创建对象
  8. StringBuffer strB2 = new StringBuffer("柳海龙");
  9. System.out.println("new StringBuffer(\"柳海龙\")创建对象的长度为:" + strB2.length());
  10. System.out.println("strB2里的内容为:" + strB2);
  11. //使用append、insert方法追加、插入字符串
  12. System.out.println("使用append方法追加字符串");
  13. strB2.append(",您好!"); //在最后增加",您好"!
  14. System.out.println(strB2);
  15. strB2.insert(3,"工程师"); //从第4个位置开始,插入"工程师"
  16. System.out.println(strB2);
  17. }
  18. }
5.4 StringBuffer类 - 图1
图5.16 StringBuffer常用方法

### 5.4.3 StringBuffer内存模型
  StringBuffer是一个内容可变的字符序列,或者说它是一个内容可变的字符串类型。当使用StringBuffer strB1 = new StringBuffer(“柳海龙”);语句创建StringBuffer对象时,内存结构示意图如图5.17所示。
5.4 StringBuffer类 - 图2
图5.17 StringBuffer内存结构示意图一

  当使用strB1.append(“工程师”)方法时,将之前创建的StringBuffer对象的内容“柳海龙”修改成“柳海龙工程师”,内存结构示意图如图5.18所示。

5.4 StringBuffer类 - 图3
图5.18 StringBuffer内存结构示意图二