Var*_*har 50 java string stringbuilder stringbuffer
在"有效的Java"一书中,Josh Bloch说
StringBuffer在很大程度上已经过时,应该被非同步实现'StringBuilder'取代
.
但根据我的经验,我仍然看到StringBuffer类的广泛使用.为什么StringBuffer类现在已经过时,为什么StringBuilder优先于StringBuffer,除非由于非同步而提高了性能?
Jon*_*eet 68
它已经过时了,因为Java 1.5上的新代码通常应该使用StringBuilder- 你真的需要以线程安全的方式构建字符串是非常罕见的,那么为什么要支付同步成本呢?
我怀疑你看到的代码StringBuffer主要属于:
StringBuilderStringBuilderBri*_*new 19
不是每个人都像你一样广泛阅读:-)
我只是半开玩笑.人们一直在复制代码和模式.很多人都没有与API变化保持联系.
为什么StringBuffer已经过时了?因为在绝大多数情况下,不需要其同步行为.我想不出我曾经需要它的时间.尽管同步现在不是以前的性能问题,但在没有必要的情况下支付税款是没有意义的.
为什么StringBuffer类现在已经过时了?
因为它的操作是同步的,这增加了开销并且很少有用.
您仍然看到StringBuffer广泛使用的原因仅仅是惯性:仍然有无数代码示例教程从未更新过使用StringBuilder,人们仍然从这些来源学习过时的实践(不仅仅是这一个).即使知道得更好的人也常常会回归过去的习惯.
我认为过时是一种夸大其词.
StringBuffer已同步.StringBuilder不是.
在许多(可能是大多数)情况下,您不会关心用于构建字符串的线程的线程安全性.在这些情况下,您应该使用StringBuilder.但是,在某些情况下,您可能希望确保对象上的操作是线程安全的.StringBuffer在这些情况下仍然有用.