2011-04-24 34 views
1

如果我有AnObjects的數組,我這樣做:數組中的元素是對象的引用還是它自身的引用?

AnObject oldObject = arrayOfObjects[validIndex]; 
arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 
oldObject.terminate(); 

是否的arrayOfObjects[validIndex]新的內容就會被終止,或者做原來oldObject遭到終止?

換句話說:oldObject包含對AnObject的引用還是包含對AnObject引用的引用?

回答

3

這段代碼有點混亂。您的對象數組必須具有對AnObject的引用。

AnObject oldObject = arrayOfObjects[validIndex]; 

您在此處將該參考號分配給oldObject

arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 

現在你設定在validIndex數組引用指向的AnObject一個新的實例。它不再指向oldObject

oldObject.terminate(); 

這是對堆上對象的引用。

oldObject指向堆上的實例;數組中的引用指向您在堆上創建的新實例。

如果oldObject被終止(不管那意味着什麼),它對您創建的新實例並不重要。該數組仍然指向新的實例。

+0

對不起,命名終止是在我的項目上下文中,它可以基本上是任何方法調用,但是在新實例上調用方法調用?我明白了嗎? – Samuel 2011-04-24 15:22:04

+0

不,如果terminate不是靜態的,它會在實例上調用 - 在你的例子中是oldObject。不是您創建數組引用指向的新實例。 – duffymo 2011-04-24 15:29:39

1

它包含對對象的引用。在這種情況下,oldObject會被終止 - 而不是放入數組中的新實例。

0

在Java中沒有對引用的引用。忽略原始類型,然後所有變量/數組單元格保存對對象的引用。下面是示出了該一個片段:

class Something { 
    public int n; 
}  

Something[] arr = new Something[2]; 
Something s = new Something(); 
s.n = 2; 

arr[0] = s; 
System.out.print(arr[0].n); // Output: "2" 
arr[0].n += 1; 
System.out.print(s.n); // Output: "3" 
1
  • 假設arrayOfObjects在 存儲器位置開始100
  • 假設 validIndex是0

然後arrayOfObjects [validIndex]表示存儲器位置100.

  • Assu我知道內存位置100有一個 的值爲200.

    AnObject oldObject = arrayOfObjects [validIndex];

的OLDobject是在存儲位置200

arrayOfObjects[validIndex] = new AnObject(oldObject.getVariableForContruction); 
  • 假設調用new分配 對象的存儲位置300。

然後存儲位置100從來沒有改變過300

oldObject.terminate(); 

的OLDobject的值,所以它在內存位置仍指向200

所以,這曾經是項目在數組被替換爲新對象後終止。

+0

非常感謝。非常清楚 – Samuel 2011-04-24 15:36:04

相關問題