Java中的StringBuffer和StringBuilder

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

......

如有错误之处,望指正

猜你喜欢

转载自blog.csdn.net/Mr_L_h/article/details/84900116