【发布时间】:2012-07-09 14:37:30
【问题描述】:
因为String和StringBuilder(或者StringBuffer)是针对不同的用途而设计的,所以我可以理解造成一半差异的原因(比如String没有append和delete)。但是,有几点让我感到困惑。
仅举几例:
- String 同时具有
getBytes和getChars,但StringBuilder 只有getChars。 - String 和 StringBuilder 分别具有
replace的不同功能。 - String 有
toLowerCase和toUpperCase,而 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