Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 - Fatal编程技术网

Java 数组复制混乱

Java 数组复制混乱,java,arrays,Java,Arrays,所以它打印出2,但我不知道为什么当arr不等于copy时它会这样做。现在不是应该是5点还是我很笨 所以它打印出2,但我不知道为什么它会这样做,当 不等于复制。现在不是应该是5点吗 不,这是预期的行为。这是因为copy和arr引用的是同一个数组对象 以不可变的方式创建副本,如下所示: int[] arr = {1, 2, 3, 4, 5}; int[] copy = arr; copy[4] = 2; System.out.println(arr[4]); 输出: 所以它打印出2,但我不知道为什

所以它打印出2,但我不知道为什么当arr不等于copy时它会这样做。现在不是应该是5点还是我很笨

所以它打印出2,但我不知道为什么它会这样做,当 不等于复制。现在不是应该是5点吗

不,这是预期的行为。这是因为copy和arr引用的是同一个数组对象

以不可变的方式创建副本,如下所示:

int[] arr = {1, 2, 3, 4, 5};
int[] copy = arr;
copy[4] = 2;
System.out.println(arr[4]);
输出:

所以它打印出2,但我不知道为什么它会这样做,当 不等于复制。现在不是应该是5点吗

不,这是预期的行为。这是因为copy和arr引用的是同一个数组对象

以不可变的方式创建副本,如下所示:

int[] arr = {1, 2, 3, 4, 5};
int[] copy = arr;
copy[4] = 2;
System.out.println(arr[4]);
输出:


编译器只是为原始数组指定一个指针,而不是创建一个单独的数组。换句话说,两个数组实际上都是相同的数据,但名称和指针不同。对其中一个的更改将影响另一个

编译器只是给原始数组分配一个指针,而不是创建一个单独的数组。换句话说,两个数组实际上都是相同的数据,但名称和指针不同。对其中一个的更改将影响另一个

数组是对象,因此可以通过引用访问。因此,arr和copy指向同一个对象。这不是复制数组的方法,您复制了指向数组内存位置的链接,并更新了同一个数组。要克隆/复制阵列,阵列是对象,因此可以通过引用进行访问。因此,arr和copy指向同一个对象。这不是复制数组的方法,您复制了指向数组内存位置的链接,并更新了同一个数组。克隆/复制阵列谢谢Arvind Kumar Avinash我不知道他们会互相复制如果他们这样做了要复制阵列而不改变大小,请使用copy=arr.clone;,这要有效得多。数组。复制。。。用于更改复制数组的大小,这就是为什么它需要newLength参数。谢谢Arvind Kumar Avinash我不知道如果他们这样做,他们会相互复制要复制数组而不更改大小,请使用copy=arr.clone;,这要有效得多。数组。复制。。。用于更改复制的数组的大小,这就是它需要newLength参数的原因。copy=arr不是浅拷贝,它是赋值,根本不是拷贝。Arrays.copyOfarr、arr.length和arr.clone都是浅拷贝的示例。因为数组不是一个对象数组,而是一个基元数组,浅拷贝也是一个深拷贝,因为没有深度可拷贝。@Andreas感谢您的解释。我将编辑我的答案以符合此要求。copy=arr不是浅拷贝,它是作业,根本不是拷贝。Arrays.copyOfarr、arr.length和arr.clone都是浅拷贝的示例。因为数组不是一个对象数组,而是一个基元数组,浅拷贝也是一个深拷贝,因为没有深度可拷贝。@Andreas感谢您的解释。我将编辑我的答案以符合此要求。
5
2
5
2