Java:实例双数组元素值修改问题
我是Java新手。我有一个可以创建实例的类。在类中,我定义了两个实例变量:Java:实例双数组元素值修改问题,java,arrays,instance-variables,Java,Arrays,Instance Variables,我是Java新手。我有一个可以创建实例的类。在类中,我定义了两个实例变量: double[]数组1 double[]数组2 阵列的长度将相等 在类中,我有一个方法1,首先填充array1,然后是另一个方法2,我想在其中设置一些array2值=array1中的值(基于数组元素索引),然后修改(执行附加操作)array2中的一些值(基于数组元素索引)。我已尝试在method2中通过第一次设置来实现这一点: array2=array1 然后根据元素索引修改一些array2值,但我看到array1已经完
double[]数组1代码>
double[]数组2代码>
阵列的长度将相等
在类中,我有一个方法1,首先填充array1
,然后是另一个方法2,我想在其中设置一些array2
值=array1中的值(基于数组元素索引),然后修改(执行附加操作)array2中的一些值(基于数组元素索引)。我已尝试在method2中通过第一次设置来实现这一点:
array2=array1代码>
然后根据元素索引修改一些array2值,但我看到array1已经完全修改为等于array2,所以我意识到我在Java中的方法有一些根本性的错误。赋值array2=array1
设置array2
以array1
的形式指向数组。无论何时修改数组(例如,array[0]=123
),这两个变量都将“看到”更改,因为它们都指向同一数组。如果要复制数组的元素,必须在数组上迭代并为其赋值(或者使用辅助方法,如Arrays.copyOf
)。例如:
//假设:两个数组都已初始化且array1.length=array2.length
对于(int i=0;i
您可能应该使用Arrays.copyOf()而不是使用带有array1的赋值来设置array2:
希望这将有助于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
输出:
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
如果你想修改数组中的元素,你需要像array2[index]=array1[index]
那样去做。我在for
循环中这样做,但我想我可以先将array2中的所有元素设置为等于array1中的元素,然后再修改array2中的一些元素。谢谢,我使用了这种方法。而且我已经有了所需的import java.util.array代码>在我的类文件中。请注意,clone()
比Arrays.copyOf
更高效,如果要创建整个数组的副本。高效的w.r.t.内存或处理速度?