使用 StringBuilder 而不是 StringBuffer 有啥特别之处 [重复]

Posted

技术标签:

【中文标题】使用 StringBuilder 而不是 StringBuffer 有啥特别之处 [重复]【英文标题】:Wha's special in using StringBuilder insted of StringBuffer [duplicate]使用 StringBuilder 而不是 StringBuffer 有什么特别之处 [重复] 【发布时间】:2012-03-18 16:43:55 【问题描述】:

可能重复:StringBuilder and StringBuffer in Java

我想知道StringBuilder和StringBuffer的区别。在 StringBuffer 中它会自动分配 16 个字符。当我们添加一个字符串“hello”时,它的容量增加到 21。谁能澄清我的疑问?

【问题讨论】:

-1 表示没有先阅读 Javadoc。 【参考方案1】:

您看过 Javadocs 吗?

来自http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

该类提供与 StringBuffer 兼容的 API,但不保证同步。此类设计用于在单个线程正在使用字符串缓冲区的地方(通常情况下)用作 StringBuffer 的替代品。在可能的情况下,建议优先使用此类而不是 StringBuffer,因为它在大多数实现下会更快。

【讨论】:

Here 的 JDK 7 javadoc:“StringBuilder 的实例对于多线程使用是不安全的。如果需要这种同步,那么建议使用 StringBuffer”【参考方案2】:

主要区别在于,StringBuffer 是线程安全的(它的所有方法都是同步的),但StringBuilder 不是。但是 StringBuilder 比 StringBuffer 快。如果您不需要线程安全,请使用 StringBuilder。

【讨论】:

【参考方案3】:

StringBuffer 是线程安全的(即,它的方法是同步的)。但是,并非每个应用程序都需要这样做,并且它会使代码比其他情况下要慢。 StringBuilder 本质上是没有同步的 StringBuffer,因此速度更快。

【讨论】:

以上是关于使用 StringBuilder 而不是 StringBuffer 有啥特别之处 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

字符串拼接时使用StringBuilder而不是String

字符串拼接时使用StringBuilder而不是String

当我使用 StringBuilder.Append 而不是 .AppendLine 时,是不是需要添加额外的 .Append(crlf)s?

android StringBuffer 和StringBuilder

StringBuffer,StringBuilder相关面试题

StringBuffer与StringBuilder的区别