【发布时间】:2018-02-27 21:26:01
【问题描述】:
在 JDK 8 中,StringBuffer 类有一个 toStringCache,而 StringBuilder 没有。
/**
* A cache of the last value returned by toString. Cleared
* whenever the StringBuffer is modified.
*/
private transient char[] toStringCache;
但是为什么呢?
我能想到的一个可能原因是 StringBuffer 已经同步,因此可以更轻松地实现缓存。
或者也许过去 StringBuffer 是这样实现的,所以旧代码严重依赖这个特性?
鉴于现代 JVM 具有逃逸分析和偏向锁定,这些差异是否相关?
【问题讨论】:
-
你的第一个猜测是正确的。
-
@Flown 值得吗?会有性能提升吗?更多代码意味着更多错误。
-
如果你多次拨打
StringBuffer::toString,那么会有好处。
标签: java java-8 stringbuilder stringbuffer