StringBuffer
线程安全的可变字符序列。
StringBuffer
上的主要操作是 append
和 insert
方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append
方法始终将这些字符添加到缓冲区的末端;而 insert
方法则在指定的点添加字符。
StringBuffer的 无参构造默认容量为16,将字符串str作为参数构造时,容量为16+str.length。
源代码:
public StringBuffer() {
super(16);
}
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
append方法:
有效地将给定的数据转换成字符串,然后将该字符串的字符追加到字符串缓冲区中
例如:给字符串"I love " 追加字符串"you"
StringBuffer sb=new StringBuffer("I love ");
sb.append("you");
System.out.println("sb="+sb);
结果是:sb=I love you
insert方法:
还是给字符串“I love you ”插入"you"。
例如:
StringBuffer sb=new StringBuffer("I love ");
sb.insert(7,"you");
System.out.println("sb="+sb);
结果是:sb=I love you
insert()里面第一个参数是插入的位置,我是给"I love "后面插入的,算上空格共有7个字符,所以从索引为7也就是第8个位置开始插入。
另外,StringBuffer还有一个String没有的反转功能public StringBuffer reverse(),将缓冲区中的字符序列反转取代,返回它(字符串冲)本身
StringBuffer sb=new StringBuffer("123456");
System.out.println(sb.reverse());
结果:654321
......
StringBuffer它兄弟StringBuilder
从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder
。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
......
StringBuilder
一个可变的字符序列。此类提供一个与 StringBuffer
兼容的 API,但不保证同步。该类被设计用作 StringBuffer
的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer
要快。
但是将 StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer
。
......
如有错误之处,望指正