为了账号安全,请及时绑定邮箱和手机立即绑定

为什么字符串在Java和.NET中不能变?

为什么字符串在Java和.NET中不能变?

小怪兽爱吃肉 2019-07-11 16:20:56
为什么字符串在Java和.NET中不能变?为什么他们决定在Java和.NET(和其他一些语言)中使字符串不可变?他们为什么不让它变?
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

根据有效Java,第4章,第73页,第二版:

“这有很多很好的理由:与可变类相比,不可变类更易于设计、实现和使用,它们不太容易出错,而且更安全。

[...]

"不可变的对象很简单。不可变对象完全可以处于一种状态,即创建对象的状态。如果您确保所有构造函数都建立了类不变量,那么就可以保证这些不变量在任何时候都是正确的,而不需要付出任何努力。

[...]

不可变对象本质上是线程安全的;它们不需要同步。它们不能被并发访问它们的多个线程破坏。这是实现线程安全的最简单的方法。事实上,没有一个线程能够观察到另一个线程对不可变对象的任何影响。因此,不可变对象可以自由地共享。

[...]

同一章的其他一些小问题:

不仅可以共享不可变的对象,还可以共享它们的内部。

[...]

不可变对象为其他对象(无论是可变的还是不可变的)提供了很好的构建块。

[...]

不可变类的唯一真正缺点是它们需要为每个不同的值设置一个单独的对象。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 491 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信