作者:YSOcean
本文版权归作者所有,欢迎转载,但未经作者同意不能转载,否则保留追究法律责任的权利。
--------------------
1-浅拷贝(shallow copy):创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象。
2-深拷贝 (deep copy):创建一个新对象,然后将当前对象的非静态字段复制到该新对象,无论该字段是值类型的还是引用类型,都复制独立的一份。当你修改其中一个对象的任何内容时,都不会影响另一个对象的内容。
3-如何实现深拷贝?
①、让每个引用类型属性内部都继承Cloneable接口,重写clone() 方法
②、利用序列化。每个需要序列化的类都要实现 Serializable 接口,如果有某个属性不需要序列化,可以将其声明为 transient,即将其排除在克隆属性之外
-----------------------
浅拷贝
我们看如下这段代码:
package com.ys.test; public class Person implements Cloneable{ public String pname; public int page; public Address address; public Person() {} public Person(String pname,int page){ this.pname = pname; this.page = page; this.address = new Address(); } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public void setAddress(String provices,String city ){ address.setAddress(provices, city); } public void display(String name){ System.out.println(name+":"+"pname=" + pname + ", page=" + page +","+ address); } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } }