不知道大家有没有注意到,StringBuffer中比StringBuilder多了一个toStringCache字段,字段上的解释是返回最后一次toString的缓存值,一旦StringBuffer被修改就清除这个缓存值。
/**
* A cache of the last value returned by toString. Cleared
* whenever the StringBuffer is modified.
*/
private transient String toStringCache;
个人认为,StringBuffer不是线程安全的么,你到处都是synchronized关键字,性能与StringBuilder相比当然大打折扣,线程安全的应用场景不是多线程么,那么访问的数量级肯定比单线程环境要大的多,所以弄个缓存,可以平衡StringBuffer的性能。