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

标签 java arrays 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]);

两行代码的系统输出不应该相同,但确实如此。

我是在做一些严重错误的事情,还是只是对我想做的事情有误解?

最佳答案

它们是通过引用更改的。

您分配给 loc 的只是 loc2 的“地址”。 因此,无论您对 loc 做什么,都会对 loc2 发生,因为它们具有相同的“地址”。

您需要做的是使用基本循环深度复制 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;
}

关于java - 更改整数数组会更改 ArrayList 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176518/

相关文章:

java - 在命令行中查找整数的第一个实例

JavaFX Maven 插件部署 .deb 而不是 .exe 文件

java - 设计: an array of "enemy" objects for game AI

javascript - this .join(this) 在 javascript 中如何工作?

javascript - 将 JavaScript 多维数组转换为 Java 数组

php - SQL左连接数组部分为空

java - 如何使用 fragment (Android)在 Activity 之间保留动态Arraylist元素

Java:为什么元素为零的 ArrayList 的打印输出是零?

java - 按映射中的特定键对 List<Map<String, Object>> 进行排序

java - 在Jmeter中提取数组中的json