《java基础——对象的拷贝》
java基础——对象的拷贝
一、浅拷贝;
规则:
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日”。
}
}