果汁≥99%+ 大差價:果滋果滋氣泡果汁 2.9 元/瓶閉眼囤
淺拷貝:
將被拷貝的例項物件,複製一份給到新的物件,從此複製之後的物件和原物件就是兩個相互獨立的物件,但是淺拷貝中的引用資料型別是沒有被拷貝的,用的還是原物件中的引用資料型別的物件
深拷貝:
和淺拷貝功能一樣,都是複製物件,只是深拷貝的複製更加徹底,將引用資料型別的資料也進行了拷貝,並且在堆記憶體中又開闢了一個空間,專門存放這些引用資料型別,之後複製體中的引用型別物件的修改和原物件不再聯絡。
程式碼實現深拷貝:
package com.hlxd.prototype1;
/**
-
@author syq
-
@date 2022年05月11日 14:38
*/
public class Runne implements Cloneable{
private String name;
private int age;
private Test test=new Test();public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public int getAge() {
return age;
}public void setAge(int age) {
this.age = age;
}public Test getTest() {
return test;
}public void setTest(Test test) {
this.test = test;
}@Override
public Object clone() throws CloneNotSupportedException {
Runne clone = (Runne) super.clone();
clone.test= (Test) test.clone();return clone;
}
}
package com.hlxd.prototype1;
/**
- @author syq
- @date 2022年05月11日 14:39
*/
public class Test implements Cloneable{
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
/**
*深拷貝和淺拷貝:
- 淺拷貝:
- 將被拷貝的例項物件,複製一份給到新的物件,從此複製之後的物件和原物件就是兩個相互獨立的物件,
- 但是淺拷貝中的引用資料型別是沒有被拷貝的,用的還是原物件中的引用資料型別的物件
- 深拷貝:
- 和淺拷貝功能一樣,都是複製物件,只是深拷貝的複製更加徹底,將引用資料型別的資料也進行了拷貝,
- 並且在堆記憶體中又開闢了一個空間,專門存放這些引用資料型別,之後複製體中的引用型別物件的修改
- 和原物件不再聯絡。
*/
public class Demo {
/**
- @param args
- @throws CloneNotSupportedException
*/
public static void main(String[] args) throws CloneNotSupportedException {
Runne resume1 = new Runne();
Runne resume2 = (Runne)resume1.clone();
System.out.println(resume1.hashCode() + " " + resume2.hashCode());
System.out.println(resume1.getTest().hashCode() + " " + resume2.getTest().hashCode());
}
}
淺拷貝較為簡單,只需要將Test設定為普通類,將Runne類中的test的克隆方法刪除即可。