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");}
