[英]What really happens when an uninitialized instance variable is initialized?
當我聲明一個實例變量時,例如:
BSTNode node;
我知道該node
現在為空,因為實例變量未初始化。 但是是否分配了一些內存來存儲null
的值,並且node
現在是對該位置的引用嗎?
我嘗試使用
System.out.println(node);
希望我能看到引用的地址,但只看到打印出"null"
。 為什么看不到地址?
如果代碼未顯式初始化實例變量,則實例變量將初始化為其默認值。 根據JLS第4.12.5節 ,所有參考變量均初始化為null
:
每個類變量,實例變量或數組組件在創建時都會用默認值初始化(第15.9節,第15.10節):
...
對於所有引用類型(第4.3節),默認值為null。
當將null
傳遞給System.out.println
,將輸出字符串文字"null"
。 用於println
的Javadocs println
print
方法來說明傳遞null
時發生的情況:
如果參數為null,則輸出字符串“ null”。
因為沒有對象,所以沒有地址。
是的,無論初始化如何,都會分配內存並分配一個值。
沒有“未初始化”這樣的東西:存在顯式初始化或使用默認值初始化的東西。
Java沒有像C / C ++這樣的指針。 您將永遠不會看到對象所在的內存指針。 而且,如果您能得到它,那么它甚至有可能因為垃圾回收而移動。
如果打印對象,則將其制成調用toString()的字符串。
“ node
現在是對該位置的引用嗎?”
內存中的null
如何表示?
那是特定於實現的,您將無法在純Java程序中看到null的表示。 (但是,在大多數(如果不是全部)Java實現中,null表示為零機器地址/指針。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.