Java-修改复制的数组也会影响原始数组

时间:2020-07-09 01:18:16

标签: java arrays

我正在复制一个数组并修改第二个数组。这怎么也修改了我从中复制原始数组的方式。该代码在给定的尺寸长度(X)范围之间创建一个随机双精度数组。然后,将数组复制到Y。Y中的第j个元素增加2.2,并将Y发送到返回双精度值的schwefel基准函数。由于X不变,因此X之前,Y之前和X之后的值均应相同。相反,After Y和After X均为新值。这是导致此问题的代码:

    double alpha = 2.2;
    X = createArray(rangeMin, rangeMax, dimension);
    double[] Y = new double[dimension];
    for (int i = 0; i < iterations; i++) {
        Y = X;
        for (int j = 0; j < dimension; j++) {
            System.out.println("Before Y: " + runFunc(Y);
            System.out.println("Before X: " + runFunc(X);
            Y[j] += alpha;
            System.out.println("After Y: " + runFunc(Y);
            System.out.println("After X: " + runFunc(X);
            Y[j] -= alpha;
            }
        }

我的输出例如:

Before Y: 894.3066859121232

Before X: 894.3066859121232

After Y: 825.661569833059

After X: 825.661569833059

1 个答案:

答案 0 :(得分:2)

您没有复制具有两个引用的数组,这些引用指向引用XY的同一数组。

如果您想复制而不反映原件,可以使用clone()方法

        double alpha = 2.2;
        X = createArray(rangeMin, rangeMax, dimension);
        double[] Y = X.clone();
        for (int i = 0; i < iterations; i++) {
            for (int j = 0; j < dimension; j++) {
                // logic
            }
        }