- 我为第一个数组设置值。
- 我将第一个数组添加到第二个数组。
- 我清除了第一个数组。
- 数组里面的数组也清空了,但是为什么,我不去碰它?
例子
// массив строк
ArrayList<String> array1 = new ArrayList<>();
// массив с массивами строк
ArrayList<ArrayList<String>> array2 = new ArrayList<>();
// добавляем в первый массив две строки
array1.add("Строка_1");
array1.add("Строка_2");
// добавляем первый массив с двумя стоками во второй массив
array2.add(array1);
// очищаем первый массив от ранее добавленных строк
array1.clear();
// проверим кол-во строк в массиве, который был добавлен в массив
int size = array2.get(0).size();
// size будет равно нулю, значит массив внутри массива тоже очистился, но почему ?
// как очистить array1 не затрагивая array2 ?
这是这条线
意味着获取数组第一个单元格的内容(这是你的嵌套数组)并调用该单元格中的对象
size()。那些。您采用嵌套数组的大小。此行将返回 1。
ArrayList是一个对象类型。将其添加到另一个集合时,仅添加链接。如果你想得到一份副本,那么你需要这样做这里的要点是您正在使用对包含字符串列表的对象的引用进行操作。那些。当您创建第一个字符串列表 (array1) 时,您在内存中创建了一个数组,现在您可以通过引用访问它,它位于 array1 变量中。
之后,您在内存中创建了另一个数组列表,并将变量放在它的第一个单元格中
array1。但是因为 这个变量是一个引用,那么你并没有在内存中创建一个新数组,而只是指出第二个数组应该从哪个内存区域取值。您现在在内存中有两个对同一个对象的引用。因此,当你通过array1引用清除内存中的值时,第二个引用
array2.get(0)也会显示空数组,因为array1它显示与内存区域相同的所有内容。如果希望第二个数组在内存中创建一个新对象而不是引用现有对象,则需要在内存中显式创建一个新对象。例如像这样: