【问题标题】:Why do String and StringBuilder/StringBuffer have different method sets?为什么 String 和 StringBuilder/StringBuffer 有不同的方法集?
【发布时间】:2012-07-09 14:37:30
【问题描述】:

因为StringStringBuilder(或者StringBuffer)是针对不同的用途而设计的,所以我可以理解造成一半差异的原因(比如String没有appenddelete)。但是,有几点让我感到困惑。

仅举几例:

  • String 同时具有getBytesgetChars,但StringBuilder 只有getChars
  • String 和 StringBuilder 分别具有 replace 的不同功能。
  • String 有 toLowerCasetoUpperCase,而 StringBuilder 没有。
  • String 有 trim,而 StringBuilder 没有。

我知道它们是设计的,但为什么呢?

【问题讨论】:

  • 因为,例如,将 StringBuilder 大写而不首先将其呈现为字符串是没有意义的。
  • @JustinSatyr,为什么?如果在将 StringBuilder 转换为 String 之前将其大写,则可以保存 String 对象。
  • @JustinSatyr 是的,但这并不能解释所有差异(例如 StringBuilder 中缺少 getBytes)。
  • StringBuilder.replace() 不适合这张照片。除此之外,字符串是不可变的,其他两个类用于通过附加各种东西来有效地构建字符串。
  • StringBuilder 的目的是避免不变性。如果您使用诸如“a”+“b”+“c”之类的常规连接,您将创建大量的 String 对象。所以,StringBuilder 不是为处理 toUpperCase 和 toLowerCase 等动作而设计的。基本上,他主要用于创建由更多其他 String 对象组成的 String 对象

标签: java string stringbuilder stringbuffer


【解决方案1】:

String 和 StringBuilder 的设计和实现相隔十多年。 Java 1.0 中的好主意在 Java 5.0 中被认为不是好主意。

例如trim() 修剪字符

【讨论】:

  • 其实我也考虑过“年龄”的问题,但是StringBuilder只是StringBuffer的非同步版本,后者是在1.0中引入的。
  • 没错,但进行了一些重新设计。例如两者都实现了 Java 5.0 中添加的 Appendable
【解决方案2】:

从 JDK 5 版本开始,StringBuffer 补充了一个为单线程 设计的等效类,StringBuilder。 StringBuilder 类通常应该优先于这个类,因为它支持所有相同的操作,但它更快,因为它执行不同步

【讨论】:

  • 不回答@Dante 的问题!
猜你喜欢
  • 2011-02-27
  • 2014-08-26
  • 2012-10-16
  • 2018-02-27
  • 2011-02-24
  • 2023-04-04
  • 1970-01-01
  • 2011-09-11
  • 2012-06-22
相关资源
最近更新 更多