Java中的null究竟是什么?

讓我們從下面的聲明開始吧:

String x = null;

上面的聲明到底做了什么?

回憶一下,什么是變量,什么是值?通常把變量比作一個箱子,就像你可以用箱子裝一些東西那樣,您可以用變量來保持一個值。當聲明一個變量的時候,我們需要設置變量的類型。
Java中有兩種主要的類型:基本數據類型和引用類型。變量就可以聲明為基本數據類型也可以聲明為引用類型。在這種情況下,初始化聲明聲明了一個變量"X",“X” 保存了一個字符串的引用,這里的引用是null。
下面的圖片給了我們一個對這個概念更加清晰的理解。

what-exactly-is-null-in-java

如果 x="abc",它看上去應該像下面這樣:

what-exactly-is-null-in-java

2.null在內存中到底是什么呢?

null在內存中到底是什么呢?或者說null值在Java中是什么呢?
首先,null不是有效的對象實例,所以不需要為它分配內存空間,它僅僅只是一個表明該引用目前沒有指向任何對象的值。
JVM規范中有這么一句話:

The Java Virtual Machine specification does not mandate a concrete value encoding null.
JVM規范沒有指明一個編碼為null的具體值。

它表現為像C語言中的0地址那樣的東西。

3.x在內存中到底是什么呢?

現在我們知道了null是什么東西了,此外,我們也知道了變量是一個保存了一些值的存儲空間的地址。那么x到底在內存的哪個地方呢?
從“JVM運行時的數據存儲區”示意圖中我們知道,既然每一個方法在線程棧中都有一個私有的棧幀,本地變量被放在棧幀中。
引用:
1.變量,操作符號和表達式
2.變量
3.JVM規范

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容