从执行速度与线程安全两个方面看:
String类型的变量是作为字符常量存储,后两者是作为字符变量存储。也就是String对象是不可变的。
所以,当字符串不进行大量操作的时候String对象的执行速度是最快的。
当需要对字符串进行修改操作的时候,Sting是最慢的。
总体执行速度(对字符串进行修改操作的时候):
StringBuilder > StringBuffer > String
线程安全:
String由于对象不可变,所以不存在多线程不安全的问题。
StringBuilder 是线程不安全的。源码:
@Override public StringBuilder append(boolean b) { super.append(b); return this; }
StringBuffer 是线程安全的。源码:
@Override synchronized StringBuffer append(AbstractStringBuilder asb) { toStringCache = null; super.append(asb); return this; }