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;
指向 array2
对 array1
引用的同一实例的引用,这意味着如果您使用这些引用中的任何一个更改值,则使用访问的值另一个将是相同的。
照做
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
我是 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 的赋值来设置 array2array2 = 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;
指向 array2
对 array1
引用的同一实例的引用,这意味着如果您使用这些引用中的任何一个更改值,则使用访问的值另一个将是相同的。
照做
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