在Java中,讓自定義對象o
的類型爲CustomObject
。然後CustomObject o2 = o;
會作參考,但不會將o
的內容複製到o2
。但是,將這種行爲仍然爲CustomObject
秒的數組:對象引用數組
CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;
將os[1]
和os[2]
是引用或者他們會因而單獨對象o
直接複製?
在Java中,讓自定義對象o
的類型爲CustomObject
。然後CustomObject o2 = o;
會作參考,但不會將o
的內容複製到o2
。但是,將這種行爲仍然爲CustomObject
秒的數組:對象引用數組
CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;
將os[1]
和os[2]
是引用或者他們會因而單獨對象o
直接複製?
嗯,實際上你的意思是os[0]
和os[1]
,因爲數組在Java中是基於0的......但是,它們將是引用。這兩個數組元素都會引用同一個對象。
重要的是,o
不是一個對象之一:
o
是可變:它有一個名稱和一個值o
的值是一個參考:它或者空,或者它指的是一個對象表達式的值(無論它是一個簡單的變量值,方法調用或任何的結果)是從未 Java中的object
- 它總是任一個的提及或原始值。
方式Java語言規範defines arrays是一樣的變量的集合:
數組對象包含多個變量。變量的數量可以是零,在這種情況下,數組被稱爲空。包含在數組中的變量沒有名稱;相反,它們由使用非負整數索引值的數組訪問表達式引用。這些變量被稱爲數組的組件。如果一個數組有n個分量,我們說n是數組的長度;數組的組成部分使用0到n - 1之間的整數索引進行引用。
所以真的有點像做:
// Creating the pseudo-array
CustomObject o0 = null;
CustomObject o1 = null;
// Populating it
o0 = o;
o1 = o;
與以往一樣,賦值運算符只是複製右側向左側的值。該值是一個參考。
我問的原因是我有一個很大的'Graph'對象,其中節點的類型也是'Graph'。當我遍歷圖時,我需要將一些節點放入一個'Graph []'數組中,我想知道這是否昂貴,這就是爲什麼擔心將對象隱藏到陣列位置的原因。那麼這是否意味着我的數組的創建速度與C++中類似的指針數組一樣快? – 2013-02-25 21:38:03
@SophieSperner:是的,非常相似。 – 2013-02-25 21:40:12
啊哈,所以Java並沒有那麼糟糕。接受的答案:) – 2013-02-25 21:41:54
爲什麼不檢查,看看你的自我? – yurib 2013-02-25 21:26:55