StringBuffer 已过时?

2022-08-31 20:28:06

在《有效的Java》一书中,Josh Bloch说:

StringBuffer在很大程度上已经过时了,应该被非同步的实现“StringBuilder”所取代。

.

但根据我的经验,我仍然看到StringBuffer类的广泛使用。为什么 StringBuffer 类现在已经过时了,为什么 StringBuilder 应该优先于 StringBuffer,除了由于非同步而提高了性能?


答案 1

Java 1.5上的新代码通常应该使用它已经过时了 - 你真的需要以线程安全的方式构建字符串是非常罕见的,那么为什么要支付同步成本呢?StringBuilder

我怀疑你看到的使用的代码大多属于以下几类:StringBuffer

  • 编写于 Java 1.5 之前
  • 编写以保持与旧版 JDK 的兼容性
  • 由不了解的人撰写StringBuilder
  • 由不知道的工具自动生成StringBuilder

答案 2

不是每个人都像你一样广泛阅读:-)

我只是半开玩笑。人们一直在复制代码和模式。许多人不会与 API 更改保持联系。

为什么 StringBuffer 已经过时了?因为在绝大多数情况下,不需要其同步行为。我想不出我曾经需要过它的时候。尽管同步现在不再是曾经的性能问题,但在不必要的情况下,缴纳这笔税款是没有意义的。