我们知道对象引用变量包含表示访问对象的方式的位。
它不包含对象本身,但它包含指针或地址之类的东西。
我正在阅读Head-First Java(第2版)一书,并在书中(第3章,第54页)写了
在Java中,我们真的不知道是什么 在引用变量中。我们的确是 知道它是什么,它 代表一个且只有一个对象。 JVM知道如何使用 引用到达对象。 -
我想问:
答案 0 :(得分:11)
完全取决于JVM来确定引用内容。
在最简单的情况下,它只是一个指针(即一个地址)。在更复杂的情况下,VM可能会根据具体情况使用不同的表示形式 - 例如,您可能希望阅读"Compressed oops in HotSpot"上的文章,以了解HotSpot VM如何避免在某些情况下将引用的大小加倍(但不是所有)作为64位VM运行时的位置。
重要的是你既不知道也不关心。就你作为程序员而言,它只是一组不透明的位 - 它的唯一目的是让你找到有问题的对象(或识别一个空引用)。
答案 1 :(得分:3)
这取决于JVM。除了可以通过它访问对象之外,不保证Java引用具有任何语义。 Sunacle也可能与IBM的做法不同。
在实践中,它可能经常是某种指针,但可能不是直接指向对象,因为GC可以移动它。
答案 2 :(得分:2)
它完全是JVM特有的。它可能是地址,指针或更复杂的东西。除了可以使用引用获取Object之外,您没有或不需要任何更难的保证。
答案 3 :(得分:0)
由JVM决定如何实现引用。
话虽如此,出于性能原因,任何“理智”实现都可能使用直接指针或某种形式的压缩指针。我相信这适用于所有当前生产的JVM。