2 回答

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
如果它是淺拷貝那么它就是引用的副本嗎?
不,它是一個(gè)新數(shù)組,包含對(duì)與原始數(shù)組相同的對(duì)象的引用
我可以對(duì)java中的任何對(duì)象使用clone方法嗎?
Object.clone()
不。閱讀和的 javadocCloneable
以了解規(guī)則。
如果是這樣,那么可以簡(jiǎn)化以下內(nèi)容(而不是使用 for 循環(huán),我可以使用克?。浚??
不,因?yàn)?code>clone()會(huì)給你一個(gè)相同長度的新數(shù)組,因此你將無法在數(shù)組末尾添加新元素。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
如果它是淺拷貝那么它就是引用的副本嗎?
不,它是對(duì)具有該對(duì)象屬性副本的新對(duì)象的新引用。細(xì)節(jié)取決于clone
.
我可以對(duì)java中的任何對(duì)象使用clone方法嗎?它復(fù)制引用還是實(shí)際對(duì)象?
首先,clone
不是用于數(shù)組淺表復(fù)制的正確工具。您可以改用System.arraycopy
。在您的情況下,您會(huì)在末尾為新條目分配一個(gè)帶有空間的數(shù)組,然后將arraycopy
原始條目分配給它,然后添加您的條目。
public void add(MarketProduct input) { MarketProduct[] list = new MarketProduct[marketproducts.length + 1]; System.arraycopy(marketproducts, 0, list, 0, marketproducts.length); list[list.length-1] = input; this.marketproducts = list; }
顯然這有點(diǎn)貴,您可能會(huì)考慮使用其中一個(gè)List
類(也許ArrayList
),這樣您就不會(huì)每次都增加數(shù)組。
重新clone
,請(qǐng)參閱JavaDoc:
創(chuàng)建并返回此對(duì)象的副本?!皬?fù)制”的確切含義可能取決于對(duì)象的類。一般意圖是,對(duì)于任何對(duì)象x
,表達(dá)式:將是真實(shí)的,并且表達(dá)式:x.clone() != x會(huì)x.clone().getClass() == x.getClass()true
,但這些都不是絕對(duì)要求。雖然通常情況是:會(huì)x.clone().equals(x)true
,這不是絕對(duì)要求。按照約定,返回的對(duì)象應(yīng)該通過調(diào)用
super.clone
. 如果一個(gè)類及其所有超類(除了Object
)都遵守這個(gè)約定,那么x.clone().getClass() == x.getClass()
.按照慣例,此方法返回的對(duì)象應(yīng)該獨(dú)立于此對(duì)象(正在被克隆)。為了實(shí)現(xiàn)這種獨(dú)立性,可能需要在
super.clone
返回之前修改返回對(duì)象的一個(gè)或多個(gè)字段。通常,這意味著復(fù)制包含被克隆對(duì)象的內(nèi)部“深層結(jié)構(gòu)”的任何可變對(duì)象,并將對(duì)這些對(duì)象的引用替換為對(duì)副本的引用。如果一個(gè)類只包含原始字段或?qū)Σ豢勺儗?duì)象的引用,那么通常情況下返回的對(duì)象中沒有字段需要super.clone
修改。
clone
類的 方法Object
執(zhí)行特定的克隆操作。首先,如果這個(gè)對(duì)象的類沒有實(shí)現(xiàn)接口Cloneable
,那么CloneNotSupportedException
拋出一個(gè)。請(qǐng)注意,所有數(shù)組都被視為實(shí)現(xiàn)接口,并且數(shù)組類型方法的Cloneable
返回類型 是其中 T 是任何引用或原始類型。否則,此方法會(huì)創(chuàng)建此對(duì)象類的新實(shí)例,并使用此對(duì)象相應(yīng)字段的內(nèi)容來初始化其所有字段,就像通過賦值一樣;字段的內(nèi)容本身不是克隆的。因此,此方法執(zhí)行此對(duì)象的“淺拷貝”,而不是“深拷貝”操作。clone
T[]
T[]
該類
Object
本身不實(shí)現(xiàn)該接口Cloneable
,因此clone
在其類是的對(duì)象上調(diào)用該方法Object
將導(dǎo)致在運(yùn)行時(shí)拋出異常。
所以你不能在沒有實(shí)現(xiàn)的對(duì)象上使用它Cloneable
,但你可以在實(shí)現(xiàn)的對(duì)象上使用它。
添加回答
舉報(bào)