什么是使用StringBuffer的真实示例?

Rus*_*ell 2 java string

我正在使用Java 6.

我只写了几个多线程应用程序,所以我从来没有遇到过多个线程访问同一个StringBuffer的时候.

当StringBuffer可能有用时,有人会给我一个真实世界的例子吗?

谢谢.

编辑:对不起我觉得我不够清楚.我总是使用StringBuilder,因为在我的应用程序中,一次只有一个线程访问字符串.所以我想知道什么样的场景需要多个线程同时访问StringBuffer.

Mar*_*ers 8

我能想到的唯一现实世界的例子是,如果你的目标是Java版本的1.5.该StringBuilder班是在1.5引入了这样的旧版本,你必须使用StringBuffer替代.

在大多数其他情况下StringBuilder应该优先StringBuffer考虑性能原因 - StringBuffer很少需要提供额外的线程安全性.我想不出任何一个StringBuffer更有意义的明显情况.也许有一些,但我现在想不到一个.

事实上,即使是Java库作者也承认这StringBuffer是一个错误:

图书馆团队评估:

根据设计,StringBuffer和StringBuilder不共享公共超类型.它们不是替代品:一个是错误(StringBuffer),另一个(StringBuilder)是它的替代品.

如果StringBuilder已经添加到库中StringBuffer,则可能永远不会添加.如果您处于附加到同一字符串的多个线程似乎是个好主意的情况下,您可以通过同步访问a来轻松获得线程安全性StringBuilder.没有必要增加一个额外的课程以及它造成的所有混乱.

值得注意的是,受Java库影响很大的.NET基类库有一个StringBuilder类但没有StringBuffer,我从来没有见过有人抱怨过.