java中的对象克隆

来源:互联网 发布:淘宝收货货款冻结15天 编辑:程序博客网 时间:2024/05/16 11:45

      在java中,Object类位于java类层次的根部,其它所有的java类都继承自Object类。在Object类中,有一个方法叫clone()方法,代码为:protected native Object clone() throws CloneNotSupportedException; 该方法可用来进行克隆操作,其中native关键字是指clone()方法不是java语言写的方法,而是jvm调用的本地硬件或其它语言写的方法。因此,当Object的一个子类要有克隆功能时,就要覆盖父类的clone()方法。

      java.lang包中,有一个Cloneable接口,该接口是一个空接口,只是用来指明一个对象是否可以被克隆。jdk源码如下所示:public interface Cloneable {};因此,如果Object的子类想要克隆时也要实现Cloneable接口。在代码中可以检验某个对象obj是否实现了Cloneable接口:if(obj instanceof Cloneable){......}else{......}

      java默认的克隆方式是浅克隆,这种方式能够克隆源对象所有的值引用,但是,如果源对象里边有对象引用存在,浅克隆只能克隆源对象的对象引用,类似于克隆指向对象的指针,但是源对象的副本将会与源对象拥有相同的对象内容。深克隆则是把源对象中所引用的对象也克隆了一遍,这样就能够保证源对象的副本与源对象本身内容相同,但各自的改变不会影响对方。