![](/img/trans.png)
[英]Can a Variable be initialized inside a Class in Java? What about Static Variable? If yes, then what's the use for Static Block?
[英]What's inside a reference variable in Java?
我們知道對象引用變量包含表示訪問對象的方式的位。
它不包含對象本身,但它包含指針或地址之類的東西。
我正在閱讀Head-First Java(第2版)的書,並在書中寫了(在第3章,第54頁)
在Java中,我們並不真正知道引用變量中的內容。 我們確實知道無論它是什么,它代表着唯一的一個對象。 並且JVM知道如何使用引用來獲取對象。 -
我想問問:
完全取決於JVM來確定引用內部的內容。
在最簡單的情況下,它只是一個指針(即一個地址)。 在更復雜的情況下,VM可能會根據具體情況使用不同的表示形式 - 例如,您可能希望閱讀有關“HotSpot中的壓縮oops”的文章,以了解HotSpot VM如何避免在某些情況下將引用的大小加倍(但是並非全部)作為64位VM運行時的位置。
重要的是你既不知道也不關心。 就你作為程序員而言,它只是一組不透明的位 - 它的唯一目的是讓你到達有問題的對象(或識別一個空引用)。
這取決於JVM。 除了可以通過它訪問對象之外,不保證Java引用具有任何語義。 Sunacle也可能與IBM有所不同。
在實踐中,它可能經常是某種指針,但可能不是直接指向對象,因為它可以由GC移動。
它完全是JVM特有的。 它可能是地址,指針或更復雜的東西。 除了可以使用引用獲取Object之外,您沒有或不需要任何更難的保證。
由JVM決定如何實現引用。
話雖如此,出於性能原因,任何“理智”的實現都可能使用直接指針或某種形式的壓縮指針。 我相信這適用於所有當前生產的JVM。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.