java中,什么叫不可更改的类(immutable class)?

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:51:47
在学习java的深拷贝时,看到的:不可更改的类的实例域,自动实现深拷贝,如String 类
而有些类 如Date 类的实例域就不行,需要调用clone()方法进行深拷贝
请问:
java中,什么叫不可更改的类(immutable class)和可更改的类?
我说的不是final
昏了,我是说类的可变与不可变 ,如String不可变,Date可变
但我就是不知道什么叫可变类与不可变类.

从字面意思来理解就是不会发生变化的类,那么是什么不会发生变化呢,其实就是类的状态,也就是不变类的实例一旦被创建,其状态就不会发生变化,举个例子:如果人是一个class,那么我们中的每一个都是人这个类的具体的instance,如果人这个类只有一个状态就是生身父母,那么它就是一个不变类,因为每一个人在出生的那一刹那,生身父母就已经被设置了值,而且终生都不会发生变化。
不变类有什么好处呢?

1) 不变类是线程安全的,由于不变类的状态在创建以后不再发生变化,所以它可以在线程之间共享,而不需要同步。

2) 不变类的instance可以被reuse

创建类的实例需要耗费CPU的时间,当这个实例不再被引用时,将会被垃圾回收掉,这时候,又需要耗费CPU的时间。对于不变类而言,一个好处就是可以将常用的实例进行缓存,从而减少了对象的创建。举个例子,对于布尔型,最常用的便是true and false。JDK中的Boolean类就是一个不变类,并且对这两个实例进行了缓冲。

public final class Boolean implements java.io.Serializable{

/**

* The <code>Boolean</code> object corresponding to the primitive

* value <code>true</code>.

*/

public static final Boolean TRUE = new Boolean(true);

/**

* The <code>Boolean</code> object corresponding to the primitive

* value <code>false</code>.

*/