首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Object的clone()步骤、深拷贝、浅拷贝

2012-10-27 
Object的clone()方法、深拷贝、浅拷贝obj.clone().getClass()obj.getClass(),即它们具有相同的类型。还有一

Object的clone()方法、深拷贝、浅拷贝
obj.clone().getClass()==obj.getClass(),即它们具有相同的类型。还有一点,因为只是简单的将对象的空间进行复制,所以如果类具有引用类型的实例变量的话,也只是将这个引用进行拷贝,并不复制其引用的对象。这就导致拷贝对象的引用实例变量与原对象的指向相同的对象,这就是传说中的“浅拷贝”。如果实例变量引用的对象是不可变的,类似于String,则拷贝对象与原对象不能互相影响,这样的拷贝是成功的。但是如果引用的是可变对象,它们就会影响彼此,对于成功的拷贝而言,这是不允许的。可以对可变的实例变量对象进行特殊处理,以实现拷贝对象和原对象不能相互影响的“深拷贝”。

      由于Object.clone()方法是protected的,所以它只能在lang包中的类或是其子类的方法内部被调用,所以,如果像下面这样调用,会编译出错,在Person kobe_bak=kobe.clone();报错,说clone只能在Object的protected作用域访问。

class Person implements Cloneable  {      private int age;      private String name;      private Date birth;      public Person(int a,String n,Date b){             age=a;      name=n;      birth=b;      }            public static void main(String[] args){          Person kobe=new Person(33,"kobe",new Date());          Person kobe_bak=kobe.clone();      }      @Override      public Object clone(){          Person p=(Person)super.clone();          //Date类型的birth域是可变变的,需要对其克隆,进行深拷贝          //Date类实现的克隆,直接调用即可          p.birth=this.birth.clone();          return p;      }  }  


                                            转自:http://www.crazyit.org

热点排行