gpt4 book ai didi

java - Java中句柄的概念是什么?

转载 作者:行者123 更新时间:2023-12-02 06:14:20 25 4
gpt4 key购买 nike

我在一个网站(http://www.rajeshpatkar.com/articles/javarefpnt/)上读到,当我们实例化一个类时,即

Emp e = new Emp();

句柄存储在变量 e 中,它不是指针,即它不将对象的地址存储在内存中。

解释给出了一个指针数组的例子。内存地址存储在 [1] 位置,当对象移动时,该位置会更新为新地址。

那么为什么使用这个数组而不是直接存储地址(它说它有助于GC,但我不明白)并在移动对象时更新它(存储在e中的地址)?

我花了很多时间来理解这一点,但仍然没有找到让我满意的答案。
因此,如果您能向我解释一下变量“e”中实际存储的内容(举个例子),那将会很有帮助。

谢谢 :)

最佳答案

通常的术语是“对象引用”(或只是“引用”),而不是“句柄”。

对象引用是一个不透明的值,它对 JVM 唯一标识某个对象。该值的形式不是由规范定义的。我怀疑它通常是 int 的大小。或 long ,但我认为 JLSJVM规范。 (为了给您一个想法,JVM 规范明确指出,即使 null [特殊值意味着“无引用”] 的确切值也不是强制性的。)

引用不是指针,当然,由于没有指定引用的形式,JVM 可以通过使用指针作为引用来实现,只要不能以违反的方式利用这一事实规范。

因为引用不是指针,Java 没有像 C 及其相关语言那样的“指针算法”。

So if you can explain me what actually is stored in the variable 'e' (with an example) it would be quiet helpful.



它不是由规范定义的。它只是一个唯一标识对象的值(我们永远看不到该值;当您使用 System.out 打印未实现 toString 的对象时看到的十六进制值是对象的引用的神话只是那:一个神话)。该值如何标识该对象取决于 JVM 的实现。它可能是一个指针。它可以是指针数组的索引。它可能更复杂,对不同的事物使用来自引用值的不同位。

关于java - Java中句柄的概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43452804/

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