API这样解释:
StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将
字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行
同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容为 "start" 的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含 "startle",而 z.insert(4, "le") 将更改字符串缓冲区,使之包含 "starlet"。
通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。
当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从
JDK 5 开始,为该类
补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但
由于它不执行同步,所以速度更快。
String类创建的字符串对象是不可修改的,也就是说,String字符串不能修改、删除或替换字符串中的某个字符,即String对象一旦创建,那么实体是不可以再发生变化的.
StringBuffer类能创建可修改的字符串序列,也就是说,该类的对象的实体的内存空间可以自动的改变大小,便于存放一个可变的字符序列。
StringBuffer:String增强版
StringBuffer声明
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer("aaa");
StringBuffer的使用
sb.toString();//转换为String类型
sb.apend("**");//追加字符串
StringBuffer类提供了四种构造方法,其格式如下:
Public StringBuffer();
构造一个不包含字符的字符串缓冲区,其初始的容量设为 16 个字符。
public StringBuffer(int);
构造一个不包含字符的字符串缓冲区,其初始容量由参数设定。
public StringBuffer(String);
构造一个字符串缓冲区,来表示和字符串参数相同的字符序列。 字符串缓冲区的初始容量为16加上字符串参数的长度。
public StringBuffer(CharSequence seq);
构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符
public
synchronized
StringBuffer append()
该功能是将一个字符添加到另一个字符串缓冲区的后面。在应用中,如果添加字符的长度超过字符串缓冲区的的长度,则字符串缓冲区自动将长度进行扩充。
可用来向字符串缓冲区添加逻辑变量、字符、字符数组、双精度数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。
public int capacity()
用于得到目前字符串缓冲区的剩余长度,该方法的返回类型为整数
public int length( )
用于得到字符串缓冲区中字符串的长度。该方法的返回类型为整数。
public void ensureCapacity(int minimumCapacity)
该方法重新设置字符串缓冲区的长度。但必须保证缓冲区的容量至少等于指定的最小数。
public void SetLength(int newLength)
指定了新字符序列的长度,如果参数 newLength 小于该字符串缓冲区的当前长度。 该字符串缓冲区将被截断来包含恰好等于由参数 newLength 给出的字符数,如果参数大于该字符串的当前长度,空字符将被加在现存缓冲区的后面。
public StringBuffer insert(int index,String str)
字符串缓冲区StringBuffer的插入操作主要用于动态地向字符串缓冲区插入逻辑变量、字符、字符数组、双精数、浮点数、整型数、长整型数、对象类型的字符串和字符串等。
public StringBuffer reverse()
将字符串序列进行反转,结果为StringBuffer。
char charAt(int index)
取得指定位置的字符。返回值类型为字符char。位置编号从0开始。
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin)
赋值指定位置的字符到字符串数组dst. 无返回值
void setCharAt(int n,char ch)
将指定位置n的字符,替换成ch,位置编号从0开始
public StringBuffer replace(int start,int end,String str)
将字符串缓冲区中起始位置为start、终止位置为end的字符替换为由字符串str指定的内容。
StringBuffer delete(int start,int end)
删除字符串缓冲区中起始序号为start、终止序号为end-1的字符。
StringBuffer deleteCharAt(int index)
删除字符串缓冲区中指定位置的字符,方法的返回类型为StringBuffer
public StringBuffer replace(int start,int end,String str)
将字符串缓冲区中起始位置为start、终止位置为end的字符替换为由字符串str指定的内容。
下面的代码段为replace方法的例子:
StringBuffer sbfSource=new StringBuffer("You are the best!");
String str=new String("I'm");
sbfSource.replace(0,7,str); // I'm the best!
publuc String substring(int start,int end)
取得字符串缓冲区中起始位置为start、终止位置为end的内容,方法返回类型为String。
public String substring(int start)
取得字符串缓冲区中从起始位置为start直至字符串缓冲区结束的所有字符,方法返回类型为String。
例子:
public class Test {
public static void main(String[] args) {
StringBuffer strBuffer = new StringBuffer();
strBuffer.append("StringBuffer");
strBuffer.append(" ");
strBuffer.append("Test");
System.out.println(strBuffer.toString());
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("StringBuffer");
strBuilder.append(" ");
strBuilder.append("Test");
System.out.println(strBuilder.toString());
}
}