簡體   English   中英

初始化未初始化的實例變量時會發生什么?

[英]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表示為零機器地址/指針。)

Stackoverflow中已經對這個問題有非常詳細的答案:您應該檢查一下!

也請觀看Tony Hoare的視頻“空引用:十億美元的錯誤”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM