java深拷贝和浅拷贝
时间: 2023-10-17 16:16:57 浏览: 25
Java中的深拷贝和浅拷贝是指在复制对象时,复制的是对象的引用还是对象的值。具体来说:
1. 浅拷贝:复制的是对象的引用,即复制后的新对象和原对象共享同一个内存地址。当修改其中一个对象时,另一个对象也会受到影响。例如:
```
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Person p1 = new Person("Tom");
Person p2 = p1;
p2.setName("Jerry");
System.out.println(p1.getName()); // 输出 "Jerry"
```
2. 深拷贝:复制的是对象的值,即复制后的新对象和原对象不共享内存地址。修改其中一个对象不会影响另一个对象。需要注意的是,如果对象中包含其他对象的引用,则需要递归地进行深拷贝。例如:
```
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Student {
private Person person;
public Student(Person person) {
this.person = person;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Person p1 = new Person("Tom");
Student s1 = new Student(p1);
Student s2 = new Student(new Person(p1.getName())); // 深拷贝
s2.getPerson().setName("Jerry");
System.out.println(s1.getPerson().getName()); // 输出 "Tom"
System.out.println(s2.getPerson().getName()); // 输出 "Jerry"
```
阅读全文