Java-修改复制的数组也会影响原始数组
我正在复制一个数组并修改第二个数组。为什么这也会修改我复制它的原始数组。该代码在给定的维度长度(X)范围内创建一个随机双精度数组。然后,数组被复制到Y。Y中的第j个元素增加2.2,Y被发送到schwefel基准函数,该函数返回一个双精度值。X之前、Y之前和X之后都应该是相同的值,因为X没有改变。相反,Y之后和X之后都是新值。以下是导致此问题的代码:Java-修改复制的数组也会影响原始数组,java,arrays,Java,Arrays,我正在复制一个数组并修改第二个数组。为什么这也会修改我复制它的原始数组。该代码在给定的维度长度(X)范围内创建一个随机双精度数组。然后,数组被复制到Y。Y中的第j个元素增加2.2,Y被发送到schwefel基准函数,该函数返回一个双精度值。X之前、Y之前和X之后都应该是相同的值,因为X没有改变。相反,Y之后和X之后都是新值。以下是导致此问题的代码: double alpha = 2.2; X = createArray(rangeMin, rangeMax, dimension)
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;
}
}
您没有复制数组,因为有两个引用指向同一个数组:引用
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
}
}
double alpha=2.2;
X=createArray(rangeMin、rangeMax、dimension);
double[]Y=X.clone();
对于(int i=0;i
您没有复制数组,您有两个引用指向同一数组,即引用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
}
}
double alpha=2.2;
X=createArray(rangeMin、rangeMax、dimension);
double[]Y=X.clone();
对于(int i=0;i