String
- String为不可变的。所以对字符串每次操作都会新建一个String。
- java.lang.String 为
public final class String implements java.io.Serializable, Comparable<String>, CharSequence
被final修饰,所以为不可变的类。
- 操作频繁,产生大量开销
StringBuffer&StringBuiler
- StringBuffer&StringBuiler在内部都维护着字符数组
- append方法,就是对字符数组进行操作
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
- StringBuffer为线程安全的,方法上都会加上
synchronized
关键字,同步。
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
```
- StringBuffer为线程不安全的,没有加锁,释放锁,所以效率更高。