Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:实例双数组元素值修改问题_Java_Arrays_Instance Variables - Fatal编程技术网

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已经完

我是Java新手。我有一个可以创建实例的类。在类中,我定义了两个实例变量:

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.内存或处理速度?