内存分配是基于引用类还是实例类?

时间:2014-06-19 15:56:46

标签: java memory-management

我在java中有一个非常转储的问题。堆中每个java对象的内存分配将基于引用类或实例类?

    public static void main(String[] a){
    MemoryParent parChild = new MemoryChild();
}

在上面的例子中,对象parChild的内存分配是基于MemoryChild还是MemoryParent?我猜它基于实例类MemoryChild。有人可以澄清这个吗?

提前致谢。

4 个答案:

答案 0 :(得分:7)

调用new时会发生内存分配。因此,分配的内存大小为MemoryChild

这很好,因为MemoryParent可能比MemoryChild小得多。

答案 1 :(得分:2)

它基于它的类型,而不是它所引用的类型。在您的情况下,对象 a MemoryChild,因此使用该对象。

这样想:如果我称你为“新SO用户”,你仍然是“@Subbu”。仅仅因为我通过其他类型向您推荐并不会改变您的状态。

答案 2 :(得分:0)

它是MemoryChild类型,因此占用MemoryChild占用的空间,运行MemoryChild具有的方法等。

但是,在您编写的代码中,您只能将其视为MemoryParent,因此如果MemoryChild上有方法,您在MemoryParent中声明了 not ,则无法调用它们

所以基本上MemoryParent是静态或编译时parChild类型,而MemoryChild是动态或运行时类型parChild。

答案 3 :(得分:0)

MemoryParent parChild = new MemoryChild();

这意味着creating object of MemoryChild and Assigning to Reference of super class MemoryParent.

所以基于内存分配的实例类而不是它引用的类型。

要详细了解内存分配,请参阅this问题。