为什么 java 有 StringBuilder 或 StringBuffer?
Why does java have StringBuilder or StringBuffer?
String
和(StringBuilder
或 StringBuffer
)有很多区别,比如可变性和许多字符串操作
可能这个问题看起来有点傻,但为了编程范式我想知道。
我想问一下,为什么Java为String
这样的数据结构实现了另一个class、StringBuilder
或StringBuffer
。为什么他们没有在 String
本身中提供这些功能。
为什么不使 String
本身线程安全或提供一些 StringBuilder
或 StringBuffer
具有的额外功能?
字符串是不可变的,有很多原因,也有很多好处。为什么?它的必要性是什么? (非常热门的话题)搜索或阅读那些
why-is-string-immutable-in-java or why-string-is-immutable-in-java
现在有些人需要做频繁的String操作,这里来了StringBuffer,它是线程安全的(同步的)。
- 一些不需要线程安全的StringBuilder.
现在有些人在不需要线程安全时仍然可以使用 StringBuffer,但那会很慢。这就是为什么它们都很重要。
字符串与 jvm
的处理方式不同 如果添加了 StringBuffer
的那些功能,它将不再是不可变的。
更新:第 2 点和第 3 点根据@Jon Skeet 的评论进行了更改。
String
和(StringBuilder
或 StringBuffer
)有很多区别,比如可变性和许多字符串操作
可能这个问题看起来有点傻,但为了编程范式我想知道。
我想问一下,为什么Java为String
这样的数据结构实现了另一个class、StringBuilder
或StringBuffer
。为什么他们没有在 String
本身中提供这些功能。
为什么不使 String
本身线程安全或提供一些 StringBuilder
或 StringBuffer
具有的额外功能?
字符串是不可变的,有很多原因,也有很多好处。为什么?它的必要性是什么? (非常热门的话题)搜索或阅读那些 why-is-string-immutable-in-java or why-string-is-immutable-in-java
现在有些人需要做频繁的String操作,这里来了StringBuffer,它是线程安全的(同步的)。
- 一些不需要线程安全的StringBuilder.
现在有些人在不需要线程安全时仍然可以使用 StringBuffer,但那会很慢。这就是为什么它们都很重要。
字符串与 jvm
的处理方式不同 如果添加了 StringBuffer
的那些功能,它将不再是不可变的。
更新:第 2 点和第 3 点根据@Jon Skeet 的评论进行了更改。