【发布时间】:2018-12-11 12:11:26
【问题描述】:
我和一位同事发生了争执,除了 List interface 在引用变量方面优于 ArrayList 的优势之外,我们还使用 List 接口作为对象引用,因为它是轻量级的,并且相比而言占用更少的内存到 ArrayList.
我的假设是错误的吗? List 和 ArrayList 占用的空间是一样的吗?
我尝试搜索参考变量大小,but nothing whetted my appetite。我不是在寻找不同VM中引用变量的大小,而是同一VM中不同引用变量之间的大小是否存在差异。
如果问题重复,请评论,以便我删除。我已经搜索并阅读了多个资源,但无法得出结论
【问题讨论】:
-
是什么让你产生了这个想法?不同类型的引用变量没有理由占用不同的内存。
-
为什么要比较接口和类? List 定义了实现,ArrayList 实现了一个 List,以及 LinkedList 或其他类。关于大小,对变量的引用始终具有相同的大小。
-
引用就是这样:一个引用,它所指的并不重要。并且对象本身也不会改变,因为它将是一个
ArrayList。如果您将其称为ArrayList或List,则只会更改变量的能力,而不会更改对象本身。 -
先是 object,然后是 variable。该变量仅保存一个引用,因此无论它是什么类型,它都占用相同数量的空间。如果您使用
new ArrayList创建该对象,它仍然是ArrayList,即使您将它放在List变量中;所以它需要相同的空间。所以你的假设是错误的。 -
其实要看JVM实现
标签: java arraylist collections