【问题标题】:Why does java have StringBuilder or StringBuffer? [duplicate]为什么java有StringBuilder或StringBuffer? [复制]
【发布时间】:2023-04-04 22:00:01
【问题描述】:

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

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

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

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

【问题讨论】:

  • @bobs_007 - 我知道 StringBuffer 和 StringBuilder 之间的区别,请阅读我的问题,即在我的帖子中加粗
  • 如果我记得很清楚字符串是线程安全的!
  • String 是不可变的,StringBuilder 是可变的。就这么简单。您不能将StringBuilder 功能添加到String,因为它们都是关于可变性的。
  • @JonSkeet 很荣幸能修正 Jon Skeet 的错别字:)

标签: java string stringbuilder stringbuffer


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

  2. 现在有人需要进行频繁的字符串操作,这里是 StringBuffer,它是线程安全的(同步的)。

  3. StringBuilder 出现了一些不需要线程安全的功能。

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

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


更新:第 2 点和第 3 点已从 @Jon Skeet 的评论中更改。

【讨论】:

  • 你在第一点想表达什么类型的理由?
  • 实际上StringBuffer 出现在StringBuilder 之前,然后Sun 意识到需要它的线程安全性非常罕见,所以他们引入了StringBuilder。如果StringBuilder 先出现,我怀疑StringBuffer 是否会被引入。
  • 感谢@JonSkeet 先生明确表示。
  • 阅读这些链接会给你一些想法,正如我所说,它非常受欢迎,所以你可以轻松搜索。
猜你喜欢
  • 2011-02-24
  • 2012-10-09
  • 2012-10-16
  • 2018-02-27
  • 2012-06-22
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多