我正在阅读Java LinkedList的源代码,注意它的构造函数LinkedList
是这样的:
public LinkedList() {
header.next = header.previous = header;
}
多少空间将分配给这个初始化,头似乎通过指向自身来创建无限递归。
我正在阅读Java LinkedList的源代码,注意它的构造函数LinkedList
是这样的:
public LinkedList() {
header.next = header.previous = header;
}
多少空间将分配给这个初始化,头似乎通过指向自身来创建无限递归。
header
它在实例变量的初始化中分配一个节点:
private transient Entry<E> header = new Entry<E>(null, null, null);
您引用的构造函数中的代码不分配内存;它只是将指针设置为初始状态。没有“无限递归”,因为内部遍历迎合了这种情况。
我不是 100% 确定您所说的“多少空间”是什么意思,但如果您的意思是在内存中分配多少空间 - 它最初只是一个字段。即使头指针指向自身,所有指针仍然只指向内存中的单个地址空间。请注意,我什至不确定它最初会指向任何地方,我认为它们最初只会被分配空值。
一个简单的例子。
String a = "Hello"
String b = a;
String c = b;
字符串“Hello”只会在内存中出现一次,即使它有多个指向它的指针。