Java: 实例双数组元素值修改问题

Java: Instance double arrays element values modification issue

我是 Java 的新手。我有一个 class 可以为其创建实例。在 class 中我定义了两个实例变量:

double[] array1;

double[] array2;

数组长度相等。

在 class 中,我有一个首先填充 array1 的方法 1,然后是另一个方法 2,我想在其中设置一些 array2 值 = array1 中的值(基于数组元素索引),然后修改(执行附加操作)array2 中的某些值(基于数组元素索引)。我试图通过首先设置在 method2 中执行此操作:

array2 = array1;

然后根据元素索引修改一些 array2 值,但我看到 array1 已完全修改为等于 array2 所以我意识到我在 Java.[=16= 中的方法存在根本性错误]

分配 array2 = array1 设置 array2 指向数组 array1。每当您修改数组(例如 array[0] = 123)时,两个变量都会 "see" 发生变化,因为它们都指向同一个数组。如果要复制数组的元素,则必须通过遍历数组并为其赋值(或使用辅助方法来完成此操作,例如 Arrays.copyOf)。例如:

// Assumption: Both arrays are initialized and array1.length = array2.length

for (int i = 0; i < array1.length; ++i) {
    array2[i] = array1[i];
    // some additional logic on array2[i]
}

您应该使用 Arrays.copyOf():

而不是使用 array1 的赋值来设置 array2
array2 = Arrays.copyOf(array1, array1.length);

希望对您有所帮助

Java中的数组是对象,变量只包含引用。
因此array1 = array2只是将array2的引用赋值给变量array1,并没有复制内容...

通过执行 array2=array1,您将 array2 的引用添加到 array1。因此,每当您对 array2 进行更改时,根据引用,array1 也会更改。因此,您需要将值从一个数组复制到另一个数组,而不是将引用从一个数组传递到另一个数组。

如果你想要一个答案

System.arrayCopy(arrayA, 0, arrayB, 0, arrayB.length);

array2 = array1; 指向 array2array1 引用的同一实例的引用,这意味着如果您使用这些引用中的任何一个更改值,则使用访问的值另一个将是相同的。

照做

array2 = array1.clone();

它会将 array1 引用的实例副本分配给 array2

演示:

public class Main {
    public static void main(String[] args) {
        int[] x = { 1, 2, 3 };
        int[] y = x.clone();
        x[2] = 5;
        System.out.println(x[2]);
        System.out.println(y[2]);
    }
}

输出:

5
3