为什么 java 有 StringBuilder 或 StringBuffer?

Why does java have StringBuilder or StringBuffer?

String 和(StringBuilderStringBuffer)有很多区别,比如可变性和许多字符串操作

可能这个问题看起来有点傻,但为了编程范式我想知道。

我想问一下,为什么Java为String这样的数据结构实现了另一个class、StringBuilderStringBuffer。为什么他们没有在 String 本身中提供这些功能。

为什么不使 String 本身线程安全或提供一些 StringBuilderStringBuffer 具有的额外功能?

  1. 字符串是不可变的,有很多原因,也有很多好处。为什么?它的必要性是什么? (非常热门的话题)搜索或阅读那些 why-is-string-immutable-in-java or why-string-is-immutable-in-java

  2. 现在有些人需要做频繁的String操作,这里来了StringBuffer,它是线程安全的(同步的)。

  3. 一些不需要线程安全的StringBuilder.

现在有些人在不需要线程安全时仍然可以使用 StringBuffer,但那会很慢。这就是为什么它们都很重要。

字符串与 jvm 的处理方式不同 如果添加了 StringBuffer 的那些功能,它将不再是不可变的。


更新:第 2 点和第 3 点根据@Jon Skeet 的评论进行了更改。