我的程序在函数内部更改了数组的元素,而我没有明确更改它。它是如何发生的?
My program changes the elements of the array inside the function without me changing it explicitly. How does it happen?
所以我正在编写一个函数,它应该交换数组的第一个和最后一个元素以及 return 修改后的数组。我的代码如下:
public static int[] swapEnds(int[] nums) {
int newArray[] = new int[nums.length];
newArray = nums; // copies all the elements to the new array
newArray[0] = nums[nums.length -1 ]; // changes the first element of the newArray
newArray[newArray.length-1] = nums[0]; // changes the last element of the newArray
return newArray;
}
通过调试,我发现 nums[0] 已被更改,但我并没有在我的代码中的任何地方进行更改。任何帮助将非常感激。谢谢
newArray = nums; // copies all the elements to the new array
不,这不会将元素复制到新数组,它会将原始数组的引用复制到 newArray
变量,这意味着只有一个数组,nums
和 newArray
变量指向它。因此,您正在修改原始数组。
使用newArray = Arrays.copyOf(nums,nums.length);
创建数组的副本。
编辑:您实际上在这里创建了一个新数组 - int newArray[] = new int[nums.length];
- 但随后您对这个数组什么都不做。
所以我正在编写一个函数,它应该交换数组的第一个和最后一个元素以及 return 修改后的数组。我的代码如下:
public static int[] swapEnds(int[] nums) {
int newArray[] = new int[nums.length];
newArray = nums; // copies all the elements to the new array
newArray[0] = nums[nums.length -1 ]; // changes the first element of the newArray
newArray[newArray.length-1] = nums[0]; // changes the last element of the newArray
return newArray;
}
通过调试,我发现 nums[0] 已被更改,但我并没有在我的代码中的任何地方进行更改。任何帮助将非常感激。谢谢
newArray = nums; // copies all the elements to the new array
不,这不会将元素复制到新数组,它会将原始数组的引用复制到 newArray
变量,这意味着只有一个数组,nums
和 newArray
变量指向它。因此,您正在修改原始数组。
使用newArray = Arrays.copyOf(nums,nums.length);
创建数组的副本。
编辑:您实际上在这里创建了一个新数组 - int newArray[] = new int[nums.length];
- 但随后您对这个数组什么都不做。