2 回答
TA贡献1818条经验 获得超3个赞
对于诸如ArrayList等的对象,当您将它们传递给函数时(如此add处),您传递了它们地址的副本,因此函数可以工作或保存该地址(如此add处将其保存在第二个列表中),以便对该对象进行任何更改,例如clear将反映在第二个列表中,除非您创建一个新列表并将其分配给您的第一个列表(现在它引用了另一个地址),但您的第二个列表具有您最后一个列表的地址并对其进行处理。
例如:
List<Integer> list1 = new ArrayList<>();
List<List<Integer> list2 = new ArrayList<>();
list2.add(list1); // list2 contains reference to where list1 points, not to list1 itself.
// so any change on where list1 points, happen for list2 reference too.
list1.add(1); // happen for list2
list1 = new ArrayList<>(); // doesn't happen for list2 because I change the address
// saved in list1 but list2 contains last address and work with last address
list1.add(5);
System.out.println(list2.get(0).get(0)); // print 1
TA贡献1844条经验 获得超8个赞
是的,在 Java 中它使用已添加到列表的特定对象的引用。
例如:
让l1和l2两个列表。
现在,
String a="Some String";
l1.add(a);
l2.add(l1);
这意味着l1在索引 0 处有a。而l2在索引 0 处有l1。
情况 1:如果我们需要从L1 中获取 a 的值,那么它就像,
l1.get(0);
与l2相同的是,
l2.get(0).get(0);
现在你的答案:
l1.clear();
清除l1 的所有元素。因此,如何将您访问的值一结算后L1,因为它不存在。
代码:
import java.util.ArrayList;
import java.util.List;
public class demo {
public static void main(String[] args) {
List l1 = new ArrayList<>();
List l2 = new ArrayList<>();
String a = "some value";
l1.add(a);
l2.add(l1);
System.out.println("l1 Size : " + l1.size());
System.out.println("l2 Size : " + l2.size());
l1.clear();
System.out.println("l1 updated Size : " + l1.size());
System.out.println("l2 updated Size : " + l2.size());
}
}
输出:
l1 Size : 1
l2 Size : 1
l1 updated Size : 0
l2 updated Size : 1
添加回答
举报