浅拷贝与深拷贝
浅拷贝
之前我们学了数组的拷贝,那么对象如何进行拷贝呢
浅拷贝定义
浅拷贝代码演示
class Hia{
int a=6;
}
class Animal {
String name="animal";
int age=0;
Hia hia=new Hia();
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Text4 {
public static void main(String[] args) throws CloneNotSupportedException {
Animal dog=new Animal("dog",5);
Animal dogcopy=(Animal) dog.clone();
}
}
代码讲解:
浅拷贝的特点
当然我们也可以用代码直观的看出来
public class Text4 {
public static void main(String[] args) throws CloneNotSupportedException {
Animal dog=new Animal("dog",5);
Animal dogcopy=(Animal) dog.clone();
System.out.println(dog.hia.a);
System.out.println(dogcopy.hia.a);
dog.hia.a=9;
System.out.println(dog.hia.a);
System.out.println(dogcopy.hia.a);
}
}
想要将复制里面的引用也复制一份就要用到深拷贝
深拷贝
深拷贝定义
深拷贝代码演示
class Hia implements Cloneable{
int a=6;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class Animal implements Cloneable{
String name="animal";
int age=0;
Hia hia=new Hia();
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
Animal animal=(Animal) super.clone();
animal.hia=(Hia) animal.hia.clone();
return animal;
}
}
public class Text4 {
public static void main(String[] args) throws CloneNotSupportedException {
Animal dog=new Animal("dog",5);
Animal dogcopy= (Animal) dog.clone();
System.out.println(dog.hia.a);
System.out.println(dogcopy.hia.a);
dog.hia.a=9;
System.out.println(dog.hia.a);
System.out.println(dogcopy.hia.a);
}
}
代码解释
深拷贝特点
深拷贝是一种复制数据的方式,它会创建一个完全独立的副本,而不是原始数据的引用。深拷贝的特点如下:
-
完全独立:深拷贝会创建一个全新的对象,而不是原对象的引用。
-
完整复制:深拷贝会复制所有的属性和方法,包括对象的嵌套属性和方法。
-
递归复制:如果对象有嵌套属性或方法,深拷贝会递归复制嵌套对象的属性和方法。
-
不受原对象改变影响:因为深拷贝生成的对象完全独立,所以它不会受到原对象的更改的影响。
需要注意的是,深拷贝可能会导致性能问题,特别是当数据结构非常复杂时。因为深拷贝会复制所有的属性和方法,包括对象的嵌套属性和方法,所以可能需要花费大量的时间和内存来完成。