2014-10-18 46 views
0

我有一個問題,我應該展開一個數組,每次創建一個具有相同結果的數組。在你告訴我僅僅使用ArrayList或其他已經存在於Java API中的東西之前,我特意指示使用我自己的代碼。我試着簡單地創建一個比我當前的陣列大一個插槽的陣列,儘管這看起來不太好。這是我目前的時刻:Java:數組擴展不會改變原始數組嗎?

public static void expand(Object[] objArray) { 
    Object[] objArray2 = new Object[a.length + 1]; 
    for (int i = 0; i < a.length; i++) 
     objArray[i] = objArray[i]; 
    objArray = objArray2; 
} 
+4

'objArray [i] = objArray [i];' – luk32 2014-10-18 22:59:08

+2

'a'從哪裏來? – csmckelvey 2014-10-18 22:59:08

+0

Chapss,爲什麼降低投票? – 2014-10-18 23:02:57

回答

0

objArray只是一個傳入參考方法的參考。它不會改變外部參考變量。方法結束時,變量objArray將從堆棧中移除。

0

分配給參數對匹配參數沒有影響,而不是對修改的參數。

0

哦,親愛的,從哪裏開始。

  • 這種方法是void,並不會引發或副作用,因此它什麼都不做。

  • 聲明objArray[i] = objArray[i];沒有效果。

  • a未被聲明(或者您沒有向我們展示足夠的上下文)。

3

您無法更新函數內的調用者引用。相反,你需要返回你的new Object[]並在調用者中更新。此外,您還可以使用System.arraycopy()

public static Object[] expand(Object[] a) { 
    Object[] b = new Object[a.length + 1]; 
    System.arraycopy(a, 0, b, 0, a.length); 
    return b; 
} 
3

我Java中,數組是按值方法傳遞的對象和對象,那就是,如果你改變什麼參考的方法指向,您的更改將留在本地。解決方法是返回修改後的對象

public static Object[] expand(Object[] objArray) { 
    Object[] objArray2 = new Object[a.length + 1]; 
    .. 
    return objArray2; 
}