2011-04-18 34 views
0

我是學習java的C++程序員。在一個方法中,我想做以下操作,獲取當前對象[稱爲array1]內存在的對象數組,並將其替換爲不同的數組[tempArray](例如形式爲C++代碼)java設置array1 = tempArray

$ ... 
$15 private void replaceArray(){ 
$16  // exchanging values tempArray also has been generated in this omitted section 
$17  delete[] array1; 
$18  array1 = tempArray; 
$19 } 
$ ... 

我遇到的問題是關鍵字「刪除」在java中並不存在。所以我的問題是,如果我只做...

$ ... 
$15 private void replaceArray(){ 
$16  // exchanging values tempArray also has been generated in this omitted section 
$17  array1 = tempArray; 
$18 } 
$ ... 

將原來的數組1仍然沒有指針存在訪問它還是會通過了Java的託管代碼環境得到照顧(是的,我知道那些指針仍然存在,但是java虛擬機只管理它們,程序員沒有權利去觸摸它們)?

回答

2

與數組的直接關聯類似於將指針複製到新變量。

如果你有另一個var到tempArray並修改任何值,你也可以修改array1。

但是,如果沒有對該數組的引用,JVM將處理內存。

此外,複製數組的更好方法是製作一個數組的clone()。

+0

clone()[?]不起作用的原因是我試圖複製數組中的每個元素接受一個,可能在中間。導致不再搜索不存在的信息。 – gardian06 2011-04-18 21:38:48

1

垃圾收集器將負責清理。這一點以及缺乏析構函數可能是從C++到java的最顯着的區別。您還需要與達成一致,每對象是一個指針 - 除了內置簡單類型和指針之外,您不能放置任何內容。

1

array1指向tempArray之後,您將不再能夠將其重新分配給它的先前值。 (假設沒有別的引用它)array1最初指向的對象將仍然存在於內存中,直到JVM執行垃圾回收來釋放內存爲止。