在Sedgewick的算法书4第201页中,aNode
占用的内存被指定为40字节:
class Node{
Item item;
Node next;
}
给出的细目如下:
对象开销=16字节
项目引用=8字节(=内存地址)
下一个引用=8字节
额外开销=8字节
额外开销的原因是:
嵌套的非静态(内部)类作为节点类(第142页)需要额外的8字节(用于引用封闭实例)
他提到的这个封闭的实例是什么
Node
类只包含item
和next
变量。有人能澄清一下吗?
最佳答案
它说Node
是一个非静态的内部类。如果该类是静态的内部类,则它可以在没有封闭类的情况下存在。因为它不是静态的,所以它依赖于定义它的外部类的实例。
所以如果我有一个类Bar
和一个静态内部类Foo
:
public class Bar {
private class Foo {
}
}
为了使用
Foo
,我必须有一个封闭的Bar
,例如。Foo foo= new Bar().new Foo();
如果
Foo
是静态的,我可以Foo foo= new Bar.Foo(); //i.e. new Bar.Foo()
因此,对于
Bar
的封闭实例,您需要额外的8个字节。