为什么String对象在java中是不可变的?

时间:2014-11-16 01:08:28

标签: java string

程序员经常需要操作String对象。 java中String对象的工作方式是每次操作String时都会创建一个新对象。这非常耗时。我知道有一个Stringbuffer类允许可变字符串,但我试图理解为什么Java建议字符串应该是不可变的?这是其他编程/脚本语言中的常见问题吗?

2 个答案:

答案 0 :(得分:5)

这是一篇关于在一般http://www.javapractices.com/topic/TopicAction.do?Id=29

中使用不可变对象的优点的好文章

使用不可变对象的好处:

  • 易于构建,测试和使用
  • 是自动线程安全的,没有同步问题
  • 不需要复制构造函数
  • 不需要克隆
  • 的实施
  • 允许hashCode使用延迟初始化,并缓存其返回值 值
  • 在用作字段时不需要进行防御性复制
  • 制作好的Map键和Set元素(这些对象不得更改 在收集中的状态)
  • 在建造之后建立了他们的阶级不变量 永远不需要再次检查
  • 总是有"失败的原子性" (Joshua Bloch使用的术语):如果是 不可变对象抛出一个异常,它永远不会留在一个异常中 不良或不确定的状态

答案 1 :(得分:0)

语言不变性有几个有用的优点。他们可以自由分享;没有复制开销等。不可变对象只有一个状态。许多其他语言(例如Python,C#)使用不可变字符串。