ArrayList实现如何在最低级别的Java中工作?

时间:2015-06-17 03:10:38

标签: java

我试图弄清楚如何将子类的对象添加到类型为superclass的ArrayList中。

Ex SavingsAccount扩展了帐户。 您有一个类型为Account的arrayList。 您可以将SavingsAccount的对象添加到arrayList。

如果ArrayList使用数组作为底层实现,那么它需要知道将存储在数组中的数据类型,以便它可以将内存块分区为每个对象将占用的正确字节数。现在让我们说一个Account对象使用8个字节,但SavingsAccount对象使用16个字节。我假设底层数组将分成8个字节的插槽,那么它如何将16字节的对象放入8字节的插槽中呢?我很困惑。

2 个答案:

答案 0 :(得分:3)

Java中的对象数组没有固定的内存块,其中分配了数组中的所有对象。相反,它有一个对象引用块,通常作为指向对象的指针实现。对象住在其他地方。无论引用引用何种类型的对象,引用都占用相同的空间量。

答案 1 :(得分:1)

您的ArrayList将只包含指向您对象的指针。所以无论你的对象是多大,因为你的List只包含对它的引用列表,对象的大小并不重要。