1.浅拷贝与深拷贝概念
深拷贝的本质就是把“引用数据类型赋值”改成“基本数据类型赋值”。
浅拷贝就是引用数据类型的赋值“引用赋值必捆绑”
第一个类
package cn.hncu.kaobei;
public class MyDate{ private int year; private int month; private int day; public MyDate(int year,int month,int day){ this.year=year; this.month=month; this.day=day; } public MyDate(){ this(1970,1,1); } public MyDate( MyDate d){ this(d.year,d.month,d.day); } public void setYear(int year){ this.year = year; } public String toString(){ return year+"年"+month+"月"+day+"日"; }}
第二个类
package cn.hncu.kaobei; public class Person{ private String name; private MyDate birth; public Person(String name,MyDate birth){ this.name = name; //this.birth = birth;//引用赋值必捆绑----出现浅拷贝 //深拷贝的本质就是把"引用赋值" 变成 "基本数据类型或String类型赋值" this.birth = new MyDate(birth); } public Person(){ this("NoName",null); } public Person( Person p ){ this(p.name, p.birth); } public void setName(String name){ this.name = name; } public MyDate getBirth(){ return birth; } public String toString(){ return name+","+birth.toString(); } }
第三个类
package cn.hncu.kaobei; public class Client{ public static void main(String args[]){ MyDate d = new MyDate(1995,4,22); Person p = new Person("Jack",d); System.out.println("p::: "+ p.toString() );//Jack,1995年4月22日 System.out.println("--------------"); /* Person p2 = p;//引用赋值必捆绑--浅拷贝 p.setName("Tom"); p.getBirth().setYear(2000); System.out.println("p::: "+ p.toString() );//Tom,2000年4月22日 System.out.println("p2::: "+ p2.toString() );//Tom,2000年4月22日 */
Person p3 = new Person(p);//深拷贝,不捆绑 p.setName("Tom"); p.getBirth().setYear(2000); System.out.println("p::: "+ p.toString() );//Tom,2000年4月22日 System.out.println("p3::: "+ p3.toString() );//Jack,1995年4月22日 } }
