在Java中,我有一个名为Couple的类,它有一个String和一个int作为istance变量。我有一个ArrayList,它拥有Class Couple的数据。方法foo,将新的couple添加到ArrayList cop_list。但是,将每条消息添加到另一个名为msg_list的ArrayList。
foo(String msg,int id)
{
Couple cop = new Couple(msg, id);
//ArrayList<Couple>
cop_list.add(cop);
//ArrayList<String>
msg_list.add(msg);
...
}
之后,当我调用delete(id)方法时,它应该按其id搜索并删除一对,但它也应该从msg_list中删除该消息。所以,我的问题是,当我从cop_list中删除一个Couple对象时,msg_list中的消息会发生什么? msg_list仍指向它,直到我明确删除它?字符串对象msg仍然在堆上?
delete(int id)
{
//search and find the couple, save its msg in a variable
msg = cop.getMsg();
cop_list.remove(cop);
//at this point, can/should i remove msg from msg_list?
//what happens if i call:
msglist.remove(msg);
}
答案 0 :(得分:1)
从列表中删除msglist.remove(msg)
后,您必须致电cop
以清除消息
msglist
仍然引用原始String
对象中的cop
。
当您致电cop_list.remove(cop)
时,String
中对msglist
的引用仍然存在。因此,您必须明确删除它。
答案 1 :(得分:0)
所以,我的问题是,当我从cop_list中删除一个Couple对象时,msg_list中的消息会发生什么? msg_list仍指向它,直到我明确删除它?字符串对象msg仍然在堆上?
是的,您仍然在msg_list
ArrayList中引用了String,因此该消息仍在内存中。该对象没有资格进行垃圾收集,而任何引用都指向它。