淘先锋技术网

首页 1 2 3 4 5 6 7

在Java中,对象的属性可以通过拷贝赋值的方式传递到其他对象中,Java中的拷贝分为深拷贝和浅拷贝两种方式。

浅拷贝指的是拷贝一个对象时,仅仅是拷贝了对象的引用地址,而并没有拷贝对象的内容,另外一个对象与原始对象共享同一个地址。相反,深拷贝则是将原始对象的内容全部拷贝到新的对象中,两个对象拥有不同的地址。

// 浅拷贝
class Student implements Cloneable {
private String name;
private int age;
private Address address;
public Student(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
@Override
public Object clone() throws CloneNotSupportedException {
// 直接调用super.clone()的方法,就完成了浅拷贝
return super.clone();
}
}

深拷贝需要对对象的所有属性(如果有对象属性,还需要对该对象属性进行递归深拷贝)重新进行拷贝,以达到新对象与原始对象完全相同,但是地址不同的效果。

// 深拷贝
class Student implements Cloneable {
private String name;
private int age;
private Address address;
public Student(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
@Override
public Object clone() throws CloneNotSupportedException {
// 实现深拷贝
Student student = (Student) super.clone();
student.address = (Address) address.clone();
return student;
}
}

总之,浅拷贝和深拷贝都有其各自的优缺点,需要根据具体情况选择不同的拷贝方式。