我有一个问题,我应该扩展一个数组,每次都创建一个结果相同的数组。在你告诉我只使用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;
}
答案 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
未声明(或者您没有向我们展示足够的背景信息)。