第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

數(shù)組的淺拷貝而不是引用的副本

數(shù)組的淺拷貝而不是引用的副本

holdtom 2023-03-09 16:46:07
我偶然發(fā)現(xiàn)了一個(gè)問題,我必須創(chuàng)建一個(gè)方法,該方法不接受輸入并返回此籃子的 MarketProduct 數(shù)組的淺表副本(不是引用的副本)。我知道解決方案如下public class Basket {    private MarketProduct[] marketproducts;    public Basket() {        this.marketproducts = new MarketProduct[0];    }    public MarketProduct[] getProducts() {        return this.marketproducts.clone();我不明白的是 1. 如果它是淺拷貝那么它就是引用的副本嗎?2.我可以對(duì)java中的任何對(duì)象使用clone方法嗎?它復(fù)制引用還是實(shí)際對(duì)象?如果是這樣,那么可以簡(jiǎn)化以下內(nèi)容(而不是使用 for 循環(huán),我可以使用克???)?public void add(MarketProduct input) {        MarketProduct[] list = new MarketProduct[marketproducts.length];        for(int i = 0; i < marketproducts.length; i++) {            list[i] = marketproducts[i];        }        list[list.length-1] = input;        this.marketproducts = list;    }
查看完整描述

2 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊

  1. 如果它是淺拷貝那么它就是引用的副本嗎?

不,它是一個(gè)新數(shù)組,包含對(duì)與原始數(shù)組相同的對(duì)象的引用

  1. 我可以對(duì)java中的任何對(duì)象使用clone方法嗎?

Object.clone()不。閱讀和的 javadocCloneable以了解規(guī)則。

如果是這樣,那么可以簡(jiǎn)化以下內(nèi)容(而不是使用 for 循環(huán),我可以使用克?。浚??

不,因?yàn)?code>clone()會(huì)給你一個(gè)相同長度的新數(shù)組,因此你將無法在數(shù)組末尾添加新元素。


查看完整回答
反對(duì) 回復(fù) 2023-03-09
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

  1. 如果它是淺拷貝那么它就是引用的副本嗎?

不,它是對(duì)具有該對(duì)象屬性副本的新對(duì)象的新引用。細(xì)節(jié)取決于clone.

  1. 我可以對(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á)式:
 x.clone() != x
將是真實(shí)的,并且表達(dá)式:
 x.clone().getClass() == x.getClass()
會(huì)true,但這些都不是絕對(duì)要求。雖然通常情況是:
 x.clone().equals(x)
會(huì)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ì)象的“淺拷貝”,而不是“深拷貝”操作。 cloneT[]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ì)象上使用它。


查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)