1. 浅拷贝只是拷贝了源对象的地址,所以源对象的值发生变化时,拷贝对象的值也会发生变化。
2. 浅拷贝相当于两个对象共用一套实例。
类名 对象名1=new 类名(); 类名 对象名2=对象名1;
例如:
public class Student { int year,month,day; void set(int x,int y, int z) { year=x; month=y; day=z; } void Str() { System.out.println(year+"年"+month+"月"+day+"日"); } public static void main(String[] args) { Student S1=new Student(); S1.set(2022,4,7); S1.Str(); //输出“2022年4月7日”。 Student S2=S1; S2.set(2021,9,12); S1.Str(); //输出“2021年9月12日”。 S2.Str(); //输出“2021年9月12日”。 } }
1. 深拷贝则是拷贝了源对象的所有值,所以即使源对象的值发生变化时,拷贝对象的值也不会改变。
2. 深拷贝相当于两个对象分别用两套实例。
void set(类名 新对象名) { 变量名=新对象名.变量名; } public static void main(String[] args) { 类名 对象名1=new 类名(); 类名 对象名2=new 类名(); 对象名2.set(对象名1); }
例如:
public class Student { int year,month,day; void set(int x,int y, int z) { year=x; month=y; day=z; } void Str() { System.out.println(year+"年"+month+"月"+day+"日"); } void set(Student m) { year=m.year; month=m.month; day=m.day; } public static void main(String[] args) { Student S1=new Student(); Student S2=new Student(); S1.set(2022,4,7); S1.Str(); //输出“2022年4月7日”。 S2.set(S1); S2.set(2021,9,12); S1.Str(); //输出“2022年4月7日”。 S2.Str(); //输出“2021年9月12日”。 } }