1、要完成对象拷贝必需完成一个Cloneable接口,假如不完成这个接口就会发生一个CloneNotSupportedException非常。实在这个接口一个要领都没有,因而这类接口常被称作标记接口。
2、Object 中有一个clone() 要领完成了浅拷贝。关于基础数据类型的成员变量,浅拷贝会直接进行值通报,也就是将该属性值复制一份给新的对象,所以基础的数据类型直接进行浅拷贝即可。
关于可变的数据类型,比方Date对象就要完成深拷贝,固然Date类本身完成了clone()要领,而比方String类就没有完成clone()要领,由于String对象是不可变字符序列,在它的生命周期中没有任何要领能修正他地点内存中的字符序列,差别对象中的同类属性援用同一个String是没有问题的。
java进修视频教程:java进修视频
示例以下:
public class Main{ public static void main(String[] args){ } } class Employee implements Cloneable{ private int id; private Date date; public Employee(){} public Employee(int id){ this.id=id; this.date=new Date(); } @Override public Employee clone() throws CloneNotSupportedException{ Object t=super.clone();//此时的object中的拷贝只是浅拷贝 Employee clone=(Employee)t; clone.date=this.data.clone();//date类完成了深拷贝,直接挪用即可 return clone; } } class Mannager extends Employee{ private String name; public Mannager(){ super(); } public Mannager(String name,int id){ super(id); this.name=name; } @Override public Mannager clone(){ Employee t=super.clone();//先把id date属性复制 Mannager clone=(Mannager)t; clone.name=t.name;//String 对象直接赋值援用 return clone; } }
更多java相干文章引荐:java入门教程
以上就是java对象拷贝之深拷贝与浅拷贝的细致内容,更多请关注ki4网别的相干文章!