本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看< 活动链接 >
提问
StringBuffer
和
StringBuilder
主要有哪些区别呢?它们之间是否存在一些性能方面的讨论话题呢?
回答1
StringBuffer
是同步的,而
StringBuilder
却不是。
StringBuilder
主要为了替代
StringBuilder
的不同步问题。
在大部分情况下,是几乎不需要同步的。如果有人想使用
StringBuilder
进行同步,则只需在实例上使用同步代码块
{}
。
我赞同上述的说法,认为
StringBuffer
不是一个好的方式(除非你必须使用它的
API
)。
对于那些将这两者混合使用的人来说,好的记忆方法是:
Buffer
,是较旧的版本,因此是同步的。较新的
Builder
类使用
Builder
模式,则是异步的。
但是,
StringBuffer
比
StringBuilder
慢。您可以根据您的应用程序来选择对应的类型。
另一个区别是
StringBuffer
可以与
Matcher#appendReplacement
一起使用,而
StringBuilder
却不能一起使用。这是一个非常烦人的
API
差异,尤其是因为
Matcher
它不是线程安全的,因此不需要进行
appendReplacement
同步。
关于
StringBuilder
的多线程环境中失败的更多细节,可以参考:
stackoverflow.com/questions/3…