为什么他们决定让String在Java和.NET(以及其他一些语言)中不可变?为什么他们不把它变成可变的呢?

推荐答案

根据第二版第4章第73页第Effective Java条:

"这有很多很好的理由:不可变的类更容易实现

[.]

"Immutable objects are simple.一个不可变的对象可以在

[.]

Immutable objects are inherently thread-safe; they require no synchronization.它们不能被多个线程 destruct

[.]

同一章中的其他要点:

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

[.]

不可变对象是其他对象(无论是可变对象还是不可变对象)的很好的构建块.

[.]

不可变类唯一真正的缺点是,它们需要 for each 不同的值指定一个单独的对象.

Java相关问答推荐

如何用Java表示C++类以通过FFI使用?

在数组中使用意想不到的结果

'在使用apache poi生成Excel数据透视表时,行标签显示为第一列标题,并显示分类汇总

OpenRewriter-如何替换连锁/流畅方法调用中的方法?

是否可以从@ TrustMapping中删除特定方法的基路径?

表格栏上的事件过滤器在PFA中不起作用

基于仅存在于父级中的字段查询子文档?

我应该避免在Android中创建类并在运行时编译它们吗?

Java事件系统通用转换为有界通配符

强制Mockito返回null而不是emtpy list

屏蔽字母数字代码的Java正则表达式

Java中的死锁及其重入锁和锁

如何正确创建序列图?

如何在Java记录中设置BigDecimal类型属性的精度?

Spring安全令牌刷新和JWT签名与本地计算的签名不匹配

如何在Java springboot中从一个端点发送多个时间响应?

插入中的JOOQ序列,设置为VS值

在打开搜索结果时,如何让Eclipse打开整个文件?

如何在更改分辨率时将鼠标坐标计算为世界坐标

JavaFX中ListView中的问题