请告诉我一个实时情况来比较 String
, StringBuffer
和 StringBuilder
?
原文由 JavaUser 发布,翻译遵循 CC BY-SA 4.0 许可协议
请告诉我一个实时情况来比较 String
, StringBuffer
和 StringBuilder
?
原文由 JavaUser 发布,翻译遵循 CC BY-SA 4.0 许可协议
String
当一个不变的结构是合适的;从 String
获取新的字符序列可能会带来不可接受的性能损失,无论是在 CPU 时间还是内存中(获取子字符串是 CPU 高效的,因为数据没有被复制,但这意味着可能有更大的数据量可能仍然分配)。StringBuilder
,通常是将多个字符序列连接在一起。StringBuffer
的相同情况下使用 StringBuilder
,但是当必须同步对基础字符串的更改时(因为多个线程正在读取/修改字符串缓冲区)。请在 此处 查看示例。
原文由 Artefacto 发布,翻译遵循 CC BY-SA 3.0 许可协议
8 回答6.5k 阅读
4 回答703 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.2k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答972 阅读✓ 已解决
可变性差异:
String
是 不可变 的,如果您尝试更改它们的值,则会创建另一个对象,而StringBuffer
和StringBuilder
是 可变 的,因此它们可以更改它们的值。线程安全差异:
StringBuffer
和StringBuilder
之间的区别在于---StringBuffer
是线程安全的。因此,当应用程序只需要在单个线程中运行时,最好使用StringBuilder
。StringBuilder
比StringBuffer
更有效。情况:
String
对象是不可变的。StringBuilder
就足够了。StringBuffer
因为StringBuffer
是同步的,因此您具有线程安全性。