Java:数组扩展是不是在改变原来的数组?

时间:2014-10-18 22:56:43

标签: java arrays object

我有一个问题,我应该扩展一个数组,每次都创建一个结果相同的数组。在你告诉我只使用ArrayList或Java API中的其他东西之前,我被特别指示使用我自己的代码。我尝试简单地创建一个比我当前数组大一个插槽的数组,尽管这似乎不能很好地工作。这就是我现在所拥有的那一刻:

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;
}

5 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

I Java,数组是对象,对象通过值传递给方法,也就是说,如果更改引用在方法中指向的内容,则更改将保留在本地。解决方案是返回修改后的对象

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

答案 2 :(得分:0)

objArray只是该方法的传入参数参数。它不会改变外部参考变量。在方法结束时,变量objArray将从堆栈中删除。

答案 3 :(得分:0)

分配参数对匹配参数没有影响,而修改参数则不然。

答案 4 :(得分:0)

亲爱的,从哪里开始。

  • 此方法为void,不会抛出或产生副作用,因此无效。

  • 声明objArray[i] = objArray[i];无效。

  • a未声明(或者您没有向我们展示足够的背景信息)。