java對象復制到另一個對象 java怎么樣構(gòu)造函數(shù)復制一個對象?
java怎么樣構(gòu)造函數(shù)復制一個對象?1、使用object本身的方法復制object,clone()。對象可克隆類必須實現(xiàn)可克隆接口,克隆方法為簡單克隆。2、 類實現(xiàn)可序列化,使用objectoutpu
java怎么樣構(gòu)造函數(shù)復制一個對象?
1、使用object本身的方法復制object,clone()。對象可克隆類必須實現(xiàn)可克隆接口,克隆方法為簡單克隆。2、 類實現(xiàn)可序列化,使用objectoutputstream、objectinputstream復制對象。對象克隆有點復雜,尤其是第一個。關(guān)于這個問題你可以搜索:javadeepcopy(deepclone)和shallowcopy(shallowclone)這篇文章來看看。
PHP對象的淺復制與深復制的實例詳解?
原型模式
使用原型實例指定要創(chuàng)建的對象的類型,并通過復制這些原型來創(chuàng)建新對象
原型模式基于深度復制和淺層復制。在Java中,有兩種拷貝:
shallow copy
拷貝一個對象后,會生成一個新的對象。新對象的所有成員變量(基本類型或引用類型)都包含與原始對象相同的對象
如果原始對象的成員變量是基本數(shù)據(jù)類型,則此變量的值將復制到新對象。如果原始對象的成員變量是引用數(shù)據(jù)類型,則此引用指向的對象將不會生成新的引用,而是
新對象中的引用和原始對象的引用指向同一對象。
深度復制
復制對象后,將生成一個新對象。新對象的基本數(shù)據(jù)類型變量包含與原始對象相同的值。例如
如果原始對象的成員變量是引用數(shù)據(jù)類型,則在新對象中,這些引用變量將指向復制的新對象,而
不再指向原始引用對象。深度復制將復制被復制對象引用的所有對象。
例如:
有一個對象a,它被復制以生成對象B。如果對象a中有一個int類型變量I的值為4,則對象B中的int值也是4。將a改為int類型變量不會影響B(tài)。如果a中有一個引用類型為
的成員變量C,它將指向?qū)ο驞。復制后,B中也會有一個C,它也指向?qū)ο驞,a的C和B的C指向同一個
對象D,這是淺層復制。如果是深度復制,a中的C指向一個D對象,B中的C指向一個新對象
,它們不會指向同一個對象。這樣,對原始對象中成員變量C指向的對象D所做的任何更改都不會影響新對象。
舉一個最簡單的例子:
classA{
publicinti
publicintj
}
AA=newa()
淺拷貝:
Aa1=a
深拷貝:
Aa1=newa()
A1。I=A.I
A1。J=A.J
感覺如下:
淺拷貝只復制對象本身
深拷貝復制對象中引用的對象并繼續(xù)復制。