2016-01-31 34 views
1

我會問一個關於Java內存使用情況的基本問題。java中的內存使用情況/參考文獻

想象一下,我們有一個數組List,它足夠大,我們不喜歡使用更多的內存。現在,如果我想通過它的構造函數或方法將此數組傳遞給另一個方法或其他類,是否需要額外的內存/是否有額外的內存使用此數組?

如果是的話,我可以只做這個數組的包級別,因此這個包中的其他類可以直接訪問它,而不需要任何內存。

預先感謝您。

回答

2

不,不需要額外的內存。函數的參數通過引用的副本傳遞。這意味着對於任何類型的對象,只能使用4個附加字節。


如果傳遞數組作爲參數,以及要在方法將方法以外導出的變化的身體修改它。

相反,如果你重新分配數組變量,不同的外部是不可見

發生這種情況是因爲參數作爲參考的副本傳遞,而不是通過引用傳遞。

public void vsibleModification(int[] a) { 
    for (int i = 0; i < a.length; i++) { 
     // This change is visible outside of method because I change 
     // the content of a, not the reference 
     a[i] = a[i] + 1; 
    } 
} 

public void nonVisibleModification(int[] a) { 
    // Non visible modification because a is reassigned to a new value (reference modification) 
    a = new int[2]; 
    a[0] = 1; 
    a[1] = 2; 
} 
+0

嗨,謝謝。但是如果我在目標方法/類中更改數組,原始數組將保持不變。這是不是意味着額外的內存使用? –

+1

我編輯答案向你展示一個例子。 –

+0

謝謝,因爲我的需要,目標方法或類不需要更改變量,只有閱讀就足夠了。你的建議是什麼? –