一个对象的引用复制给另一个对象,一共有三种方式。第一种是直接赋值,第二种方式是浅拷贝,第三种是深拷贝,这三种方式实际上都是为了拷贝对象。
1、直接赋值
//用了lombok插件,生成get,set方法,有参构造与无参构造
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private Student student;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private Integer score;
}
public class CopyTest {
public static void main(String[] args) {
Student student = new Student(1, 80);
User user1 = new User(1, "zhangSan", 25, student);
System.out.println("user1==>"user1.toString());
// 采用直接赋值的方式复制
User user2=user1;
// 改变原对象中的值
user1.setAge(26);
// 改变复制后对象的值
user2.setName("zhangSan1");
// 因为user1给年龄重新赋值了,对象user2中的年龄对应的值也会改变
// user1和user2是指向同一块内存的两个指针
System.out.println("user2==>"user2.toString());
}
}
user1==>User(id=1, name=zhangSan, age=25, student=Student(id=1, score=80))
user2==>User(id=1, name=zhangSan1, age=26, student=Student(id=1, score=80))
直接赋值相当于是指针赋值,user1和user2这两个对象都是指向同一块内存,只要其中任何一个改变