Java - 通过方法重新引用数组

标签 java arrays pointers

:)

我遇到的问题:这是我正在尝试做的事情的非常简化的版本,因为我实际上需要重新计算大量颜色(取自 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 按值传递参数(即使该值是引用,例如对数组的引用)。它无法更改 b1relink 的值 - 因为它收到的只是 b1 值的副本。 (嗯,在这种情况下,它可以直接将 b1 分配给 b1,因为它是一个实例方法,而 List<E> 是一个实例变量,但我怀疑这只是一个巧合,在您的实际代码中可能无效。)

如果您希望两个变量引用同一个数组,为什么不在调用方法中使用赋值运算符呢?

b1 = a1;

或者,如果您还有其他工作要做,您也可以使该方法返回对适当数组的引用:

b1 = relink(a1);

很难确切地知道什么是最合适的,因为您还没有真正告诉我们您想要做什么。如果您希望能够删除元素,那么数组很可能是错误的数据结构,因为您无法从中删除元素。您是否考虑过使用 ArrayList<E> 实现来代替,例如 ojit_code ?

关于Java - 通过方法重新引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866716/

相关文章:

c - 链表地址

java - Play Framework 2.4.x 中的 CORS 故障排除

C# ecdsa 签名 - 我可以选择哪种 key 规范?

java - 将项目添加到 Android ListView

python - Python-对2D数组中的每个元素执行操作并将其存储在新的2D数组中

c++ - 大小为用户输入的双数组

c - 使用函数将地址写入结构中的指针失败

java - Lombok 构建器覆盖默认构造函数

C,一个数组需要的内存空间是否比它的元素更多?

c - 无法理解此 C 函数的作用