为什么Java和.NET中的字符串不可变?

问题:

为什么他们决定在Java和.NET(和其他一些语言)中使字符串不变?为什么他们不使它变得可变?

回答:

根据Effective Java,第4章,第73页,第2版:

“有很多很好的理由:不可变类比可变类更容易设计,实现和使用,它们不太容易出错,更安全。
[…]
 不变的物体很简单。不可变对象可以处于完全一个状态,即创建它的状态。如果您确保所有构造函数都建立类不变量,则可以保证这些不变量始终保持为真,而且您也不用担心。
[…]
 不变的对象本质上是线程安全的;它们不需要同步。它们不能被同时访问它们的多个线程所破坏。这是实现线程安全的最简单的方法。事实上,没有线程可以观察到另一个线程对不可变对象的任何影响。所以不可变对象可以自由共享
[…]

同一章的其他小点:

不仅可以分享不可变的对象,还可以分享其内容。
[…]
不可变对象为其他对象提供了巨大的构建块,无论是可变的还是不可变的。
[…]
不可变类的唯一真正的缺点是它们需要为每个不同值分配一个对象。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why can’t strings be mutable in Java and .NET?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 − = 7