如何在Java中按值传递二维数组?

时间:2016-02-17 10:58:27

标签: java arrays

My Array就是这样:

int[][] arr = new int[3][4];

我想解除函数中我的数组发生的变化。如何通过值将它传递给函数?

谢谢。

2 个答案:

答案 0 :(得分:1)

您无法按值传递数组。

保持原始数组不变的唯一方法是将数组的副本传递给您的方法。请注意,对于多维数组,您不能使用Arrays.copyOf来创建该副本,因为它执行浅拷贝,因此内部数组不会重复(它们的引用将被复制)。

public static int[][] cloneArray(int[][] src) {
    int length = src.length;
    int[][] target = new int[length][src[0].length];
    for (int i = 0; i < length; i++) {
        System.arraycopy(src[i], 0, target[i], 0, src[i].length);
    }
    return target;
}

答案 1 :(得分:1)

在Java中,您无法按值传递数组(或任何Object)。对Object的引用按值传递,使该方法被称为对对象内数据的完全访问权。

要解决此问题,请执行以下操作之一:

  • 停止对方法内的原始数组进行更改。相反,请明确地制作副本,并对其进行处理。
  • 上述方法很脆弱,因为Java没有强制执行&#34;没有变更&#34;需求。另一种方法是将数组封装在一个不可变的类中,让该类处理数组的副本。
  • 最后,您可以创建一个为您提供完全封装数组的类,并实现copy-on-write策略。这种方法允许您在需要时制作副本,从而可能提高性能。