考虑这个例子:
int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();
b.add(a);
a[0] = 1;
a[1] = 1;
b.add(a);
b现在是{[1,1],[1,1]}。 如何在不分配其他数组的情况下确保{[0,0],[1,1]} ?
答案 0 :(得分:2)
它只是添加了参考。所以它将是{[1,1],[1,1]}
。除了分配另一个数组之外,我认为还有其他解决方案。
答案 1 :(得分:2)
不分配另一个数组
嗯,您希望同时拥有两个独立的值集。这需要两个数组(或两个列表等)。
答案 2 :(得分:1)
数组是一个对象。如果更改数组,将它添加到列表中的次数无关紧要,toString将显示数组的最新状态。 列表的toString迭代他的元素并在每个元素上调用toString。 我不知道你想做什么,但也许你应该阅读一些基本的教程。
答案 3 :(得分:0)
ArrayList<int[]>
的每个元素都是对int数组的引用。如果您添加两次相同的数组(正如您所做的那样),它将在列表中重复。更改int数组的元素将在ArrayList中的每次出现时反映出来。要拥有不同的阵列,您需要分配单独的阵列。这样的事情会做:
int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();
b.add(a.clone()); // add a distinct array
a[0] = 1;
a[1] = 1;
b.add(a);
然后b的内容将是{[0,0],[1,1]}。