Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要使类不可变?_Java - Fatal编程技术网

Java 为什么要使类不可变?

Java 为什么要使类不可变?,java,Java,可能重复: 有谁能给我举一个在java中实际使用不可变类的例子吗? 真正的目的是什么?例如,为什么字符串是不可变的一个不可变的类是不可变的,这样任何对该对象具有现有引用的对象都不会弄乱,而这些引用依赖于对象内部保持不变的信息。在某些情况下,它对效率有轻微的影响,但取舍是可靠性和稳定性。它基本上意味着为所使用的每个方法创建一个新对象。不可变类是不可变的,因此任何对该对象具有现有引用的对象都不会弄乱,这依赖于对象内部的信息保持不变。在某些情况下,它对效率有轻微的影响,但取舍是可靠性和稳定性。它基本

可能重复:

有谁能给我举一个在java中实际使用不可变类的例子吗?
真正的目的是什么?例如,为什么字符串是不可变的

一个不可变的类是不可变的,这样任何对该对象具有现有引用的对象都不会弄乱,而这些引用依赖于对象内部保持不变的信息。在某些情况下,它对效率有轻微的影响,但取舍是可靠性和稳定性。它基本上意味着为所使用的每个方法创建一个新对象。

不可变类是不可变的,因此任何对该对象具有现有引用的对象都不会弄乱,这依赖于对象内部的信息保持不变。在某些情况下,它对效率有轻微的影响,但取舍是可靠性和稳定性。它基本上意味着为使用的每个方法创建一个新对象。

一个原因是不可变类是线程安全的。

一个原因是不可变类是线程安全的。

因为正确管理共享的可变状态很困难(有时效率很低)。如果
String
不是不可变的,那么每个方法都必须是线程安全的,并允许字符串的内容发生更改。在这种情况下,不可变意味着不需要锁定,因为您可以对字符串执行的唯一操作就是读取它

这是函数式编程语言的主要优点之一;所有状态都是不可变的(即不允许破坏性更新)。

因为很难(有时效率低下)正确管理共享的可变状态。如果
String
不是不可变的,那么每个方法都必须是线程安全的,并允许字符串的内容发生更改。在这种情况下,不可变意味着不需要锁定,因为您可以对字符串执行的唯一操作就是读取它


这是函数式编程语言的主要优点之一;其中所有状态都是不可变的(即不允许破坏性更新)。

因为Java中没有
const
。爱当有人写时-astring.replace(str1,str2)而不使用结果:)因为Java中没有
const
。爱当有人写时-astring.replace(str1,str2)而不使用结果:)