java 浅克隆与深克隆


Java的对象都是引用,当将一个对象赋值给另外一个对象的时候, 也就是说指针(当然,java没有指针的概念)同指向同一块内存地址。

这个时如果对一个对象进行修改,也必然会修改另外一个对象的值,这明显不是我们想要的.
 
解决这个问题,可以引入克隆技术,我们可以克隆一个对象出来,使得对克隆出来的对象修改不会改变原始对象的值。
 
克隆分为:浅克隆和深克隆。
 
浅克隆是指:浅克隆只是克隆当前的对象,不克隆该对象所应用的对象
 
深克隆是指:深克隆不但克隆当前的对象,而且还克隆该对象所引用的对象
 
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。
 
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出
CloneNotSupportedException。 注意:所有的数组都被视为实现接口 Cloneable。
否则,此方法会创建此对象的类的一个新实例,并像通过分配那样, 严格使用此对象相应字段的内容初始化该对象的所有字段; 这些字段的内容没有被自我克隆。

所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。

我们知道,Java是纯面向对象的程序设计语言。
Java里,所有的类的顶级父类都是java.lang.Object类,
也就是说,如果一个类没有显示 申明继承关系,它的父类默认就是java.lang.Object。
                                                                                   
有一个很简单的方法可以证明这一点,我们写一个Test类,如下:
public class Test {
public void someMethod() {
super.clone();
    }
}
里面调用了super.clone(),编译时并不报错。其实clone()方法为java.lang.Object类提供的一个 protected型方法。


 

你可能感兴趣的:(java,object,而且)