Java中StringBuilder和StringBuffer的append(Object obj)方法使用

214 阅读2分钟

1、Java中字符串连接的方法

1-1、用 “+” 加号连接字符串

private String str1;

private String str2;

private String concat() { 
    String str = str1 + str2;
    return str;
}

1-2、使用StringBuffer的append(Object)

StringBuffer stringBuffer = new StringBuffer().append("Hello").append(" World!");

1-3、使用StringBuilder的append(Object)

StringBuilder stringBuilder = new StringBuilder().append("Hello").append(" World!");

一般说来,

StringBuffer是线程安全的;

StringBuilder是线程不安全的;

1-4、JavaAPI关于【StringBuffer】的说明

  • 线程安全的可变字符序列;
  • 一个类似于 String 的字符串缓冲区,但不能修改;
  • 虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容;
  • 可将字符串缓冲区安全地用于多个线程;
  • 可以在必要时对这些方法进行同步, 因此任意特定实例上的所有操作就好像是以串行顺序发生的, 该顺序与所涉及的每个线程进行的方法调用顺序一致。 

1-5、JavaAPI关于【StringBuilder】的说明

  • 一个可变的字符序列;
  • 此类提供一个与 StringBuffer 兼容的 API, 但不保证同步;
  • 该类被设计用作 StringBuffer 的一个简易替换, 用在字符串缓冲区被单个线程使用的时候(这种情况很普遍);
  • 如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

1-6、StringBuffer与StringBuilder的append(Object) 的方法比较

1、StringBuffer 的 append(Object Obj) 源码

// 追加 Object 参数的字符串表示形式。
// 参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。
// 然后,将所得字符串中的字符追加到此序列。
public synchronized StringBuffer append(Object obj) {
    super.append(String.valueOf(obj));
    return this;
}

2、StringBuilder 的 append(Object Obj) 源码

// 追加 Object 参数的字符串表示形式。
// 参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。
// 然后,将所得字符串中的字符追加到此序列。
public StringBuilder append(Object obj) {
    return append(String.valueOf(obj));
}

无论使用StringBuffer还是StringBuilder的append(Object obj)方法, 最终调用的都是String的valueOf(Object Obj)方法;

而当对象为null时,调用String.valueOf(Object obj)返回的是"null" 字符串;

所以在使用 StringBuffer或者StringBuilder做Object对象连接时,要注意Object是否为null;