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;