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

使用字符串String连接,方式有以下几种方式

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

String s = String0 + String1 + String2 + String3 + String4;

 这里使用反编译工具,最终发现代码也是通过StringBuilder.append(连接)

2、使用 “+=”

String s = new String();
s += String0;
s += String1;
s += String2;
s += String3;
s += String4;

3、使用StringBuffer的append(Object) 

StringBuffer stringBuffer = new StringBuffer();
String s = stringBuffer.append(String0).append(String1).append(String2)
        .append(String3).append(String4).toString();

4、使用StringBuilder的append(Object) 

StringBuilder stringBuilder = new StringBuilder();
String s = stringBuilder.append(String0).append(String1).append(String2)
        .append(String3).append(String4).toString();

一般说来,

StringBuffer是线程安全的

StringBuilder是线程不安全的

JavaAPI中提到

StringBuffer
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。
虽然在任意时间点上它都包含某种特定的字符序列,
但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。
可以在必要时对这些方法进行同步,
因此任意特定实例上的所有操作就好像是以串行顺序发生的,
该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuilder
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,
但不保证同步。
该类被设计用作 StringBuffer 的一个简易替换,
用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

StringBuffer与StringBuilder的append(Object) 的方法

1、StringBuffer的append(Object Obj)源码

public synchronized StringBuffer append(Object obj) {
    super.append(String.valueOf(obj));
    return this;
}

 API中的方法说明

追加 Object 参数的字符串表示形式。
参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。
然后,将所得字符串中的字符追加到此序列。

2、StringBuilder的append(Object Obj)源码

public StringBuilder append(Object obj) {
    return append(String.valueOf(obj));
}

  API中的方法说明

追加 Object 参数的字符串表示形式。
参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。
然后,将所得字符串中的字符追加到此序列。

无论使用StringBuffer还是StringBuilder的append(Object obj)方法,

最终调用的都是String的valueOf(Object Obj)方法

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

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

猜你喜欢

转载自edward-lee.iteye.com/blog/2328739
今日推荐