:)
我遇到的问题:这是我正在尝试做的事情的非常简化的版本,因为我实际上需要重新计算大量颜色(取自 Color
对象),并且需要对它们进行排序,并删除和计算 2 个数组中的重复项。 (或者无论我应该使用什么数据模型,我选择了 2 个数组)。
我遇到的问题是我无法在方法中重新引用数组,就像它之后保留在那里一样。
public class Algos2 {
private int[] b1 = null;
public void relink(int[] a1, int[] a2) {
a2 = a1;
}
public Algos2() {
int[] a1 = { 0, 5, 5, 5, 3, 3, 0, 0, 1, 2, 1, 5};
relink(a1, b1);
System.out.println("a1 " + a1); // whatever, working
System.out.println("b1 " + b1); // still null
}
public static void main(String[] args) {
new Algos2();
}
}
之后 b1
应返回与 a1
相同的指针。我需要在一个方法内完成它。 :/
编辑:我也不能直接这样做,通过方法返回一个数组。所以不: public int[] relink(int[] a1) {return a1;}
因为我还需要从另一个方法中调用它,这也会导致 null
最佳答案
这不起作用,因为 Java 按值传递参数(即使该值是引用,例如对数组的引用)。它无法更改 b1
中 relink
的值 - 因为它收到的只是 b1
值的副本。 (嗯,在这种情况下,它可以直接将 b1
分配给 b1
,因为它是一个实例方法,而 List<E>
是一个实例变量,但我怀疑这只是一个巧合,在您的实际代码中可能无效。)
如果您希望两个变量引用同一个数组,为什么不在调用方法中使用赋值运算符呢?
b1 = a1;
或者,如果您还有其他工作要做,您也可以使该方法返回对适当数组的引用:
b1 = relink(a1);
很难确切地知道什么是最合适的,因为您还没有真正告诉我们您想要做什么。如果您希望能够删除元素,那么数组很可能是错误的数据结构,因为您无法从中删除元素。您是否考虑过使用 ArrayList<E>
实现来代替,例如 ojit_code ?
关于Java - 通过方法重新引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866716/