java中深拷贝和浅拷贝
在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。
而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。
所以到现在,就应该了解了,所谓的浅拷贝和深拷贝,只是在拷贝对象的时候,对 类的实例对象 这种引用数据类型的不同操作而已。
浅拷贝 containObject指的是容器地址

深拷贝


顶级类Object里面的方法 clone(),native本地修饰无法打开,protected修饰只有在同一个包的子类才有资格
引用对象默认浅拷贝
public class Student { private String name; private Integer age; public Student(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
public static void main(String[] args) {
Student student1 = new Student("张三",23);
Student student2= student1;
System.out.println( System.identityHashCode(student1));
System.out.println( System.identityHashCode(student2));
}

数值对象
public static void main(String[] args) { int student1 = 1; int student2= student1; System.out.println( System.identityHashCode(student1)); System.out.println( System.identityHashCode(student2)); }
打印内存地址

重写Clone方法
public class Student implements Serializable,Cloneable {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public static void main(String[] args) throws Exception {
Student student1 = new Student("name",12);
Student student2= (Student) student1.clone();
System.out.println( System.identityHashCode(student1));
System.out.println( System.identityHashCode(student2));
}

完成深拷贝,即复制内存地址和值
写博客是为了让别人能明白,之后在是自己明白. 如果有不明白的地方欢迎加Q3378404370 讨论

浙公网安备 33010602011771号