【发布时间】:2013-11-11 08:32:36
【问题描述】:
是否有理由在单线程应用程序中使用StringBuffer 而不是StringBuilder?如果我们不计算使用多线程的应用程序中的同步,StringBuffer 有什么优势吗?
【问题讨论】:
标签: java stringbuilder stringbuffer
是否有理由在单线程应用程序中使用StringBuffer 而不是StringBuilder?如果我们不计算使用多线程的应用程序中的同步,StringBuffer 有什么优势吗?
【问题讨论】:
标签: java stringbuilder stringbuffer
我能想到的唯一原因是与 1.5 之前的 Java 兼容(可能仍在一些大公司中使用),以及要与不支持 StringBuilder 的其他平台(即 CLDC)共享的代码。
【讨论】:
没有。即使在多线程应用程序中,您也不一定需要StringBuffer,除非您实际上是从多个线程处理它。如果您愿意,可能还有更好的数据结构可供使用。
【讨论】:
是否有理由在单线程应用程序中使用 StringBuffer 而不是 StringBuilder?
答案是:没有理由。
【讨论】:
没有理由选择StringBuffer。以下语句是从StringBufferDoc 复制而来的:
从 JDK 5 开始,这个类已经被一个为单线程使用而设计的等效类 StringBuilder 进行了补充。通常应优先使用 StringBuilder 类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
【讨论】:
StringBuilder 具有非同步方法,而 StringBuffer 具有同步方法。因此,对于单线程应用程序,建议使用 StringBuilder。
【讨论】:
StringBuffer 仅在我们想要线程安全时使用。将StringBuffer 类用于单线程应用程序并不是一个好主意,因为它会使处理速度变慢。因此,如果您不打算使用线程,请使用 StringBuilder 类,因为由于缺少同步,它会比 StringBuffer 更有效。
【讨论】:
你可以在单线程应用程序中使用StringBuffer,但是没有理由。
虽然,现代 JIT-comiler 非常聪明,它可以 eliminated 不必要的同步和 StringBuffer 可以转向 StringBuilder。但这不可能发生。 =)
【讨论】:
一般来说,没有理由使用 StringBuffer!
(即使你有一些古老的应用程序或库,通常也只有生成的String 被传递...)
String 从多个线程接收输入的用例应该是什么?
人们可能会考虑诸如日志记录之类的事情,但如果需要在多线程环境中进行日志记录,则可以使用许多解决方案,而无需自己发明...
所以:否
【讨论】: