5.4 StringBuffer类
5.4.1 StringBuffer类的概念
StringBuffer类也可以存放字符串。与String类不同的是,StringBuffer字符串代表的是可变的字符序列,可以对字符串对象的内容进行修改。
以下是StringBuffer类最常用的构造方法。
StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuffer字符串使用场合为经常需要对字符串内容进行修改操作的场合。
5.4.2 StringBuffer类的使用
以下是通过StringBuffer类的构造方法创建StringBuffer字符串的代码。
StringBuffer strB1 = new StringBuffer();
copy
通过strB1.length()返回长度是0,但在底层创建了一个长度为16的字符数组。
StringBuffer strB2 = new StringBuffer("柳海龙");
copy
通过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所示。
public class TestStringBuffer {
public static void main(String[] args) {
System.out.println("创建StringBuffer对象");
//使用StringBuffer()构造器创建对象
StringBuffer strB1 = new StringBuffer();
System.out.println("new StringBuffer()创建对象的长度为:" + strB1.length());
//使用StringBuffer(String str)构造器创建对象
StringBuffer strB2 = new StringBuffer("柳海龙");
System.out.println("new StringBuffer(\"柳海龙\")创建对象的长度为:" + strB2.length());
System.out.println("strB2里的内容为:" + strB2);
//使用append、insert方法追加、插入字符串
System.out.println("使用append方法追加字符串");
strB2.append(",您好!"); //在最后增加",您好"!
System.out.println(strB2);
strB2.insert(3,"工程师"); //从第4个位置开始,插入"工程师"
System.out.println(strB2);
}
}
copy

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

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