AbstractStringBuilder
StringBuffer
类和 StringBuilder
类都继承自 AbstractStringBuilder
类。
在 AbstractStringBuilder
类中用一个 byte 数组保存字符串。
byte[] value; // JDK 8 is a char array
与 String
类相比,该数组并没有被 final 关键字修饰。
append 方法
AbstractStringBuilder
类定义了多个 append()
方法, StringBuilder
类和 StringBuffer
类都覆写了这些方法。
- StringBuilder 类
public StringBuilder append(String str) {
super.append(str);
return this;
}
- StringBuffer 类
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
可见 StringBuilder
类和 StringBuffer
类非常相似,仅仅是后者的方法用 synchronized 关键字进行了修饰,即 StringBuffer
是线程安全的,而 StringBuilder
不是线程安全的。
StringBuilder or +
在循环体内,字符串的链接方法应该使用 StringBuilder
的 append
方法,而不是使用 + 操作符。
String str = "start";
// 反例
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
// 正例
StringBuilder stringBuilder = new StringBuilder(str);
for (int i = 0; i < 100; i++) {
stringBuilder.append("hello");
}