Java的拷貝分爲深拷貝和淺拷貝
淺拷貝:把一個對象中所有的非static成員變量(包括對其它對象的引用,java中的引用相當於C/C++中的指針變量)都拷貝一遍,而不拷貝引用所指向的對象
深拷貝:把一個對象中所有的非static成員變量(包括對其它對象的引用)都拷貝一遍,引用所指向的對象也拷貝一份
這篇文章先講述淺拷貝,深拷貝下篇文章講述
一個類的對象如果想要具有拷貝的功能,比如符號如下條件:
1.必須實現Cloneable接口(這個接口中沒有定義方法,叫做標記接口)
2.重寫Object類的clone()方法,該方法實現的是淺拷貝
3.在該類的clone()方法中的第一句,比如調用super.clone()來調用Object的clone()方法來實現拷貝
以下是一個淺拷貝的例子:
從運行結果可以看出,通過學生s2將其引用school所指向的對象的name和bornYear屬性改變,相應的s1的也被改變,這說明學生s1和學生s2裏面的school引用指向的始終是同一個School對象。這就是淺拷貝的含義。