Java - изменение скопированного массива также влияет на исходный массив - PullRequest
0 голосов
/ 09 июля 2020

Я копирую массив и изменяю второй массив. Почему это также изменяет исходный массив, из которого я его скопировал. Код создает массив случайных чисел типа double между заданным диапазоном длины измерения (X). Затем массив копируется в Y. j-й элемент в Y увеличивается на 2,2, а Y отправляется в тестовую функцию schwefel, которая возвращает значение типа double. Перед X, Перед Y и После X все должны иметь одно и то же значение, поскольку 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 Ответ

2 голосов
/ 09 июля 2020

Вы не скопировали массив, у вас есть две ссылки, указывающие на один и тот же массив, ссылка X и Y.

Если вы хотите сделать копию, а не отразить ее в оригинале, вы можете используйте 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
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...