1.功能
由方法名(轉殖)可知是複製乙個物件,方法呼叫後會建立並返回此物件的乙個副本。
2.為什麼不用 「=」 以賦值的方式建立物件副本?
這裡只對stu2的name屬性重新賦值,然而stu1的name屬性值也改變了.student stu1 = new student("zhaoliu",18,"1996-11-20");
student stu2 = stu1;
stu2.setname("lisi");
system.out
.println(stu1);
system.out
.println(stu2);
//執行結果:
student [name=lisi, age=18, birthday=1996-11-20]
student [name=lisi, age=18, birthday=1996-11-20]
再看下面的**
把物件stu1賦值給stu2, 其實只是將物件的引用賦值給了stu2, 將兩個物件的hashcode列印.student stu1 = new student("deng",18,"1996-11-20");
student stu2 = stu1;
system.out
.println(stu1.hashcode());
system.out
.println(stu2.hashcode());
可以看出,stu1和stu2其實是同乙個物件.
可見要複製乙個物件,用」=」是不可行的.
2.clone的使用方法
實現cloneable介面,重寫clone方法.

執行結果如下student stu1 = new student("zhaoliu",18,"1996-11-20");
student stu2 = (student) stu1.clone();
stu2.setname("lisi");
system.out
.println(stu1);
system.out
.println(stu2);
system.out
.println(stu1.hashcode());
system.out
.println(stu2.hashcode());
從**執行結果可以看出, 現在的stu2和stu1是兩個不同的物件.
3.深拷貝和淺拷貝
clone方法雖實現了物件的複製,這裡存在乙個深拷貝和淺拷貝的問題.
執行結果:student stu1 = new student("zhaoliu",18,"1996-11-20");
student stu2 = (student) stu1.clone();
system.out
.println(stu1.getname().hashcode());
system.out
.println(stu2.getname().hashcode());
可見兩個物件的name屬性是同乙個string物件.-323273412
-323273412
當改變stu1的 name屬性值後
執行結果:student stu1 = new student("zhaoliu",18,"1996-11-20");
student stu2 = (student) stu1.clone();
stu2.setname("lisi");
system.out
.println(stu1.getname().hashcode());
system.out
.println(stu2.getname().hashcode());
system.out
.println(stu1.getname());
system.out
.println(stu2.getname());
由此可知,雖然兩個物件中的string物件在clone後string物件引用相同,但當改變其中乙個值的內容後,不會影響另乙個物件.-323273412
3322003
zhaoliu
lisi
對於數值型別(int,long,float等)拷貝後直接將值賦值給新的物件屬性, 對於像string等物件賦值的是物件的屬性.
關於深拷貝和淺拷貝問題我沒有很透徹的理解, 相關問題請參考 深拷貝和淺拷貝.
java中的clone 方法詳解
test public void testassign test public void testshallowcopy throws exception如果是基本資料型別的成員變數,我們轉殖之後彼此的屬性是可以相互不影響的,接著看 如果增加乙個自定義的類物件時 data public class ...
Java中的clone和深度clone
複製物件 or 複製引用 person p new person 23,zhang person p1 p system.out.println p system.out.println p1 當person p1 p 執行之後,是建立了乙個新的物件嗎?首先看列印結果 person p new pe...
java 中的clone 在陣列中
今天在程式設計中遇到發現乙個問題,那就是二維陣列的clone,只有第一層clone了,裡層的還是指向之前的位址 string a string aa a.clone aa 0 22 system.out.println a 0 列印 1 string e string ee e.clone ee 0...