不可变类是指其实例不能被修改的类。不可变类适用于缓存目的,且线程安全。不可变对象是指一旦初始化,其状态就不会改变的实例。
而对象克隆是指创建一个对象的精确副本。它创建当前对象类的新实例,并使用与该对象相应字段的内容完全相同的内容初始化其所有字段。
现在,问题是为什么说我们不需要克隆不可变类?
这是因为创建已用于缓存目的的数据的精确副本将增加系统中产生的垃圾,并潜在地减慢应用程序的运行速度。或者还有其他相关答案。
不可变类是指其实例不能被修改的类。不可变类适用于缓存目的,且线程安全。不可变对象是指一旦初始化,其状态就不会改变的实例。
而对象克隆是指创建一个对象的精确副本。它创建当前对象类的新实例,并使用与该对象相应字段的内容完全相同的内容初始化其所有字段。
现在,问题是为什么说我们不需要克隆不可变类?
这是因为创建已用于缓存目的的数据的精确副本将增加系统中产生的垃圾,并潜在地减慢应用程序的运行速度。或者还有其他相关答案。
如果要在不改变原对象状态的情况下更改其副本的状态,则需要创建对象的副本(克隆)。
由于不可变类的对象状态无法更改,因此可以放心使用原始对象而不会产生任何风险。
Person p0 = new Person("Jon"); Person p1 = new Person("Jon");
的比较 p0 == p1
将返回 false
(因为对象并不相同),而 p0.equals(p1)
应该返回 true
(假设有适当的 equals
实现)。 - Marco13