为什么java创建了Strings as IMMUTABLE CLASS?

时间:2012-01-11 17:27:02

标签: java

  

可能重复:
  Why can't strings be mutable in Java and .NET?
  What's the advantage of a String be Immutable?

任何人都可以告诉我为什么String类被创建为不可变类, 这种设计方法背后有任何正当理由吗?

请分享您的想法

2 个答案:

答案 0 :(得分:2)

因为如果String类是而不是 final,那么你可以声明一个String的子类,它会破坏String类的任意数量的契约,尤其是 immutability ,并且对毫无戒心的程序员造成严重破坏。

想象:

class MyString extends String {
  // Override methods which mutate this instance...
}

现在每当MyString作为String传递时,它都可能导致各种问题,特别是关于散列,这取决于String的不变性。

答案 1 :(得分:0)

因为它使它们更容易使用:

  • 线程安全而不同步
  • 可用作地图中的密钥
  • 每次传递或返回时都不需要创建防御性副本
  • 池化
  • ...