首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringBuffer过时了吗?

StringBuffer过时了吗?
EN

Stack Overflow用户
提问于 2011-07-21 11:04:34
回答 5查看 5.5K关注 0票数 52

在“有效Java”一书中,乔希·布洛赫说

StringBuffer在很大程度上已经过时,应该由非同步实现“StringBuilder”代替。

但在我的经验中,我仍然看到了StringBuffer类的广泛使用。为什么StringBuffer类现在已经过时了,为什么StringBuilder应该比StringBuffer更好,除了由于不同步而提高性能之外?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-21 11:08:17

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

我怀疑使用StringBuffer的代码大多属于以下几个类别:

在Java1.5之前编写的StringBuilder

  • Autogenerated

  • 是为了维护与旧的JDK的兼容性而编写的,它是由不知道StringBuilder

的人编写的,由不知道StringBuilder的工具编写

票数 71
EN

Stack Overflow用户

发布于 2011-07-21 11:05:51

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

我只是半开玩笑而已。人们一直在复制代码和模式。许多人不了解API的变化。

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

票数 19
EN

Stack Overflow用户

发布于 2011-07-21 11:10:43

为什么StringBuffer类现在过时了?

因为它的操作是同步的,这增加了开销,并且很少有用。

您仍然看到StringBuffer被广泛使用的原因仅仅是惯性:仍然有无数的代码示例教程从未被更新以使用StringBuilder,而且人们仍然从这些来源学习过时的实践(不仅仅是这个)。即使是知道得更好的人也常常会回到旧习惯。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6775016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档