gpt4 book ai didi

java - Java 中引用变量大小的差异。 (列表与数组列表)

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:15 25 4
gpt4 key购买 nike

我和同事吵架了,除了优点List interface有超过 ArrayList<> 用于引用变量,我们还使用 List<> 接口(interface)作为对象引用,因为它是轻量级的,并且与 ArrayList<> 相比占用更少的内存。

我的假设错了吗? List 和 ArrayList 占用的空间是否相同?

我尝试搜索引用变量大小,but nothing whetted my appetite .我不是在寻找不同 VM 中引用变量的大小,而是在同一 VM 中不同引用变量之间的大小是否存在差异。

如果重复,请对问题发表评论,以便我删除。我已经搜索和阅读了多种资源,但无法得出结论

最佳答案

是的,所有引用变量的大小都相同。这在 JVM 规范中的几个地方有点切线:§2.2 :

Like the Java programming language, the Java Virtual Machine operates on two kinds of types: primitive types and reference types. There are, correspondingly, two kinds of values that can be stored in variables, passed as arguments, returned by methods, and operated upon: primitive values and reference values.

(他们的重点)

§2.6.1 :

A single local variable can hold a value of type boolean, byte, char, short, int, float, reference, or returnAddress. A pair of local variables can hold a value of type long or double.

(我的重点)

如您所见,虽然它调用的东西大小不同(int 存储在单个 JVM 变量中,long 存储在一对 JVM 变量中,例如),只有一种引用适合单个 JVM 变量。 (JVM 变量与 Java 源代码级别的变量不同,尽管它们显然密切相关。)


在您的评论中:

I got the general idea because ArrayList's reference would have more functionality than a List's reference...

这就是你误解的根源。功能等不包含在引用 中,它包含在与引用引用(对象)相关联的实现(类)中。例如:

List<String> list = new ArrayList<>();

它声明了一个 List (挥手泛型) 类型的变量,它引用了 ArrayList 的一个实例,它是一个对象相关的实现(ArrayList 类)。引用只是告诉 JVM 对象在内存中的位置,仅此而已。您可以将其视为唯一标识对象的数字(如果您愿意,甚至可以将其视为内存地址,尽管它比那更复杂),尽管您永远无法直接与数字(地址)交互。每个对象的实现(类)不是重复的(特定于对象的状态数据是,但不是它使用的方法),但即使是,也不会重复对对象的引用,它将在对象本身中。没有 List 对象,因为 List 是一个接口(interface)。只有ArrayList对象,LinkedList对象等

关于java - Java 中引用变量大小的差异。 (列表与数组列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53723957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com