事情并没有像我认为的那样发生,下面的代码是我正在做的事情的体现。我创建了一个 arrayList,然后向其中添加了一个整数数组。然后我将一个新构造的整数数组分配给数组列表的第一个元素。然后我更改构造的整数数组的值。我输出了 arrayList 元素和整数数组,它们是相同的值,这是不应该发生的。
ArrayList<int[]> path = new ArrayList<int[]>();
int loc2[] = {0,0};
path.add(loc2);
int loc[];
loc = path.get(0);
loc[0] += 1;
System.out.println(loc[0]);
System.out.println(path.get(0)[0]);
两行代码的系统输出不应该相同,但确实如此。
我是在做一些严重错误的事情,还是只是对我想做的事情有误解?
最佳答案
它们是通过引用更改的。
您分配给 loc
的只是 loc2
的“地址”。
因此,无论您对 loc
做什么,都会对 loc2
发生,因为它们具有相同的“地址”。
您需要做的是使用基本循环深度复制
loc2
到loc
。例如:
public int[] copyArr(int[] arr) {
int length = arr.length;
int[] newArr = new int[length];
for (int i = 0; i < length; i++) {
newArr[i] = arr[i];
}
return newArr;
}
关于java - 更改整数数组会更改 ArrayList 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176518/