标签:lazy while src 初始化 mic img http 疑问 code
对于链表添加操作,假如不考虑按序号添加,则可以写一个简单的方法:
public void add(HeroNode heroNode) {
//因为head节点不能动,因此我们需要一个辅助变量遍历
HeroNode temp = head;
//遍历链表,找到最后
while (true) {
//找到链表的最后
if (temp.next == null) {
break;
}
//没有找到最后,就讲temp后移
temp = temp.next;
}
//当退出while循环时,temp就指向了链表的最后
temp.next = heroNode;
}
这里可能存在一个疑问:局部变量temp在出栈以后就被JVM垃圾回收了,那
temp.next = heroNode;
这句代码中间的细节如何理解?
可以画出JVM的栈结构和堆结构来阐明:
HeroNode temp = head;
只是创建了一个局部变量temp,局部变量在Java中均存放于栈中,其指向了堆空间中的head(head在属性处直接初始化了)。此时temp.next就是head.next,即Node1。所以,temp.next = heroNode也就是把此时堆中对象的指针指向了传入的形参heroNode。所以即便temp被JVM回收,依然完成了辅助创建指针的作用。
标签:lazy while src 初始化 mic img http 疑问 code
原文地址:https://www.cnblogs.com/LostSecretGarden/p/14656017.html