在JAVA中给对象赋值分为浅拷贝和深拷贝,浅拷贝指的是只是将被赋值的对象的指针指向用来赋值的对象,深拷贝指的是在给当前对象开辟一个新的空间,并给他拷贝一份相同的值。
浅拷贝:两个对象指向相同的堆对象,他们是完全一样的两个对象,就好像一个人的笔名和真正名称一样。
public class Test {
private String name;
public Test(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Test t1 = new Test("HRX");
Test t2 = t1;
System.out.println(t1 == t2);
System.out.println(t1+" "+t2);
System.out.println(t1.getName());
System.out.println(t2.getName());
}
}
结果:
深拷贝: 两个对象指向不同的堆内存,就好似拥有相同名字的两个人一样。
public class Test {
private String name;
public Test(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Test t1 = new Test("HRX");
Test t2 = new Test("qwe");
t2.setName(t1.getName());
System.out.println(t1 == t2);
System.out.println(t1+" "+t2);
System.out.println(t1.getName());
System.out.println(t2.getName());
}
}
结果: