StringBuilder和StringBuffer的构造器和方法基本相同,StringBuffer是线程安全的,StringBuilder非线程安全。StringBuffer类中的方法添加了synchronized关键字,给方法添加了一个锁,用来保证线程安全。Java9对字符串(String、StringBuffer、StringBuilder)进行了优化,在Java9以前字符串采用char[]数组来保存字符,字符串的每个字符占2字节,Java9的字符串采用byte[]数组和一个encoding-flag字段来保存字符,字符串的每个字符只占1字节,所以Java9的字符串更加节省空间。
StringBuilder源码
@Override
@HotSpotIntrinsicCandidate
public StringBuilder append(String str) {
super.append(str);
return this;
}
是什么导致了StringBuilder的线程不安全,进入父类AbstractStringBuilder
public AbstractStringBuilder append(String str) {
if (str == null) {
return