[英]Java reference and garbage collector
我下面有两节课,我想学习两种类型的作业之间的区别是什么
类别:
class ClassA {
public ArrayList<String> listA;
public ClassA() {}
}
class ClassB {
public ArrayList<String> listB;
public ClassB() {}
}
我想将所有的listB数组值放入listA数组,以下用法之间有什么区别? 第二次使用时,两个类之间是否存在任何引用,这对于垃圾收集器删除对象可能是个问题。 那usage3呢?
ClassA clsA= new ClassA();
ClassB clsB= new ClassB();
usage1
for (String s : clsB.listB) {
clsA.listA.add(s);
}
usage2
clsA.listA=clsB.listB;
usage3
clsA.listA=clsB.listB;
clsB.listB = null;
用法1:ListA现在将具有其他元素,这些元素来自listB。
用法2:ListA现在是ListB,两个引用都引用同一个对象(赋值语句)。 如果原始ListA没有当前引用,则将对其进行垃圾回收。
用法3:ListA现在是ListB(与之前一样的引用赋值),然后紧随其后,ListB被赋值为null(指的是空指针)。 如果原始ListA没有当前引用,则将对其进行垃圾回收。
我想将所有的listB数组值放入listA数组,以下用法之间有什么区别?
用法1是您想要的。
如上所述,选项1不是“分配”。 在ClsA.lstB.clear()之前进行复制。
此外,考虑ClsA.lstA =(ArrayList)ClsB.lstB.clone();
这将提供目标的干净(浅)副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.