2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
clone()方法的默認(rèn)版本創(chuàng)建對(duì)象的淺拷貝。
對(duì)象的淺拷貝將具有原始對(duì)象所有字段的精確副本。如果原始對(duì)象有任何對(duì)其他對(duì)象的引用作為字段,則只有這些對(duì)象的引用被復(fù)制到克隆對(duì)象中,不會(huì)創(chuàng)建這些對(duì)象的副本。這意味著通過(guò)克隆對(duì)象對(duì)這些對(duì)象所做的任何更改都將反映在原始對(duì)象中,反之亦然。
要?jiǎng)?chuàng)建對(duì)象的深層副本,您可以覆蓋該clone()方法。
protected Object clone() throws CloneNotSupportedException
{
DogTail tail = (DogTail) this.tail.clone();
Dog dog = (Dog) super.clone();
dog.tail = tail;
return dog;
}

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
“所以如果我改變上面創(chuàng)建的 t 對(duì)象或 ear 方法,它會(huì)在 dognew 對(duì)象中改變,反之亦然。”
這取決于你所說(shuō)的“改變”是什么意思:
如果您的意思是更改引用的DogTail
實(shí)例的狀態(tài)t
,例如t.setSomething(someValue);
,則是。這是同一個(gè)實(shí)例,無(wú)論是誰(shuí)導(dǎo)致更改或更改發(fā)生在何處都無(wú)關(guān)緊要。
但是,如果您的意思是更改t
克隆引用中的內(nèi)容,例如t = new DogTail();
,t
原始引用中的內(nèi)容將不會(huì)受到影響。在t
后,在克隆和原將引用不同的實(shí)例。
添加回答
舉報(bào)