String、StringBuffer 和 StringBuilder

新手上路,请多包涵

请告诉我一个实时情况来比较 StringStringBufferStringBuilder

原文由 JavaUser 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 686
2 个回答

可变性差异:

String不可变 的,如果您尝试更改它们的值,则会创建另一个对象,而 StringBufferStringBuilder可变 的,因此它们可以更改它们的值。

线程安全差异:

StringBufferStringBuilder 之间的区别在于--- StringBuffer 是线程安全的。因此,当应用程序只需要在单个线程中运行时,最好使用 StringBuilderStringBuilderStringBuffer 更有效。

情况:

  • 如果您的字符串不会更改,请使用 String 类,因为 String 对象是不可变的。
  • 如果您的字符串可以更改(例如:字符串构造中的大量逻辑和操作)并且只能从单个线程访问,则使用 StringBuilder 就足够了。
  • 如果您的字符串可以更改,并且可以从多个线程访问,请使用 StringBuffer 因为 StringBuffer 是同步的,因此您具有线程安全性。

原文由 bakkal 发布,翻译遵循 CC BY-SA 3.0 许可协议

  • 你使用 String 当一个不变的结构是合适的;从 String 获取新的字符序列可能会带来不可接受的性能损失,无论是在 CPU 时间还是内存中(获取子字符串是 CPU 高效的,因为数据没有被复制,但这意味着可能有更大的数据量可能仍然分配)。
  • 当您需要创建一个可变字符序列时,您可以使用 StringBuilder ,通常是将多个字符序列连接在一起。
  • 您在使用 StringBuffer 的相同情况下使用 StringBuilder ,但是当必须同步对基础字符串的更改时(因为多个线程正在读取/修改字符串缓冲区)。

请在 此处 查看示例。

原文由 Artefacto 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题