2011-09-14 27 views

回答

0

汇集以避免重复表示相同的对象。

不可变使分享更容易。

6

字符串对象不是通常仅合并字符串常量通过实习自动合并。 (您可以手动调用intern的过程中,甚至通过HashSet<String>等创建自己的池)这是唯一安全的因为字符串是不可变的 - 这是有道理的,以确保任何编译时间常数只在内存中出现一次。

你不会愿意支付的查找在实习生池的字符串(或保持它撒手人寰)为字符串中的系统的价格,因为有可能会随着时间的推移许多不同的字符串。然而,从类加载的字符串常量只要这些类一直存在,并且通过将它们内联一次,您可以减少GC流失所需的内存。

+0

@Downvoter:小心评论? –

3

如果字符串是不是一成不变的,你将无法

  • 安全地从一个getter返回一个字符串字段不破坏封装,因为调用者可能会修改背后的字符串的内容以在线程之间共享字符串,因为某些线程可能会修改其内容。所有对字符串的访问都必须进行同步。
  • 使用字符串作为包含HashMap /树状键,因为有人可能会改变其价值,因此其的hashCode /比较顺序
  • 汇集字符串,以具有相同的常量字符串的单个实例
  • 有串共享其串相同的字符数组

总之,生活会复杂得多,因为你将不得不作出的字符串的防守拷贝无处不在,StackOverflow上会提供关于微妙的错误,其中一些问题被淹没字符串存储在地图中,但无法找到。

1

可变字符串检出:java.lang中的StringBuffer和StringBuilder。