当最后一个人忘记你的时候,那才是真正的死亡(Java)
今天又想起了这句话,因为在看LinkedList源码的时候。
细细道来:
/** * Unlinks non-null first node f. */ private E unlinkFirst(Node<E> f) { // assert f == first && f != null; final E element = f.item; final Node<E> next = f.next; f.item = null; f.next = null; // help GC first = next; if (next == null) last = null; else next.prev = null; size--; modCount++; return element; }
这是LinkedList里的一个方法,作用如注释所说,乃是分离(删除)第一个非空元素,并将它返回。
代码很简单,
第一,先将入参节点的item引用传递于element,
第二,遂清空item,
最后,返回element.
第一遍看的时候我在想,item将引用给了element之后,它们就指向了一个目标对象,再将item清空的时候,难道不会将element也清空,最后返回null吗?(明显是错误的想法)
第二遍看的时候,才反应过来,仅是将item的引用置null了,element返回先前的引用。
那为什么我会很容易的出现第一种想法呢?是因为我遇见的很多情况下,一个引用的持有者就能完成对它对所持引用指向的目标对象的修改删除,当他清空自己引用的时候,java gc就会因为没有其他引用再指向这个目标对象时,清空目标对象。
说到这里,我又想起了前两天看的一个电视剧,叫做{山海情}。
故事最后,村民们不愿意搬离自己土生土长的根,也是因为先人就在这片土地上的原因吧。只要我还在这,就有人记得你,这里就有历史。
(只要同事都离职,就没有人记得我写过bug #坏笑#坏笑#坏笑)