更改整数数组会更改ArrayList的值

时间:2014-03-04 15:45:57

标签: java arrays arraylist

事情并没有发生,因为我认为他们应该这样做,下面的代码是我正在做的事情。我创建一个arrayList然后添加一个整数数组。然后我将一个新构造的整数数组分配给我的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]);

两行代码的系统输出不应相同,但它是。

我做了一些严重错误的事情,或者我只是误解了我想要做的事情?

2 个答案:

答案 0 :(得分:2)

通过引用更改它们。

您分配给loc的内容只是loc2的“地址”。 因此,无论您使用loc进行了什么,都会发生loc2,因为它们具有相同的“地址”。

您需要做的是使用基本循环deep copy loc2loc。例如:

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;
}

答案 1 :(得分:1)

您正在处理对相同实际的整数数组的引用。你有效地将'loc2'拉回来并将其分配给'loc'。

如果处理'loc2','loc'或使用path.get(0),它们与实际的整数数组相同,包含你制作'loc2'时的第一组值。

如果要获取副本并对其进行处理而不更改ArrayList中的原始数组。您需要创建一个新的Array对象,将值复制到您想要的对象中,然后使用它。

您可以查看使用System.arraycopy()。见Make copy of array Java