Q1:在第5行,mess
是否会松开对第1行实例化的对象的引用(被覆盖)?
Q2:在enqueue
方法的第3行,我将混乱的引用存储在ArrayList
的新“插槽”中。即使对第1行创建的对象的引用将丢失(因为第5行),它也不会被垃圾收集,因为ArrayList
仍然指向它?
问题3:在执行这七行之后,在控制器的队列中应该有两个Messenger
对象的引用?
1: Messenger mess = new Messenger(_TYPE1_);
2: /* ... */
3: controller.enqueue(mess); // store the reference inside a Runnable in the queue
4: /* ... */
5: mess = new Messenger(_TYPE2_);
6: /* ... */
7: controller.enqueue(mess);
答案 0 :(得分:1)
Q1:是的,只是重新分配了一个新的参考。
Q2:对。
问题3:对。
答案 1 :(得分:1)
A1:是的,它将失去参考。该引用的值(您可以将其视为指针)将被新Message
对象的引用覆盖。简而言之:mess
停止“指向”_TYPE1_
,现在“指向”_TYPE2_
。
A2:根据定义,如果没有引用指向他,则对象有资格进行垃圾收集。你在这里回答了自己的问题。
A3:是的,因为您排队的对象不同(排队时引用了不同的对象)。