Java中的null究竟是啥?

咱們從下面這個簡單的語句提及:java

String x = null;


這行代碼作了什麼?

先回想一下什麼叫作變量(variable),什麼叫作值(value)。咱們一般把一個變量比喻成一個盒子。咱們能夠用盒子來裝東西,一樣咱們就能夠用變量變保存值。定義變量時須要指定變量的類型。

在Java中,有2種主要的數據類型:基本數據類型和引用類型。定義成基本數據類型的變量用來保存值,而定義成引用的變量用來保存引用。因此上面這行代碼所作的工做就是,聲明瞭一個變量x,用來存儲引用。這裏x沒有引用任何對象。

下面這張圖能更清楚地表達出這一狀況:


若是 x = "abc"的話,那麼狀況就以下圖所示:


null在內存裏究竟是什麼?

首先,null不是一個合法的對象引用,因此係統並無給它分配內存。它僅僅是一個用來代表該引用變量沒有引用任何對象的值。

JVM規範中是這麼說的:
Java虛擬機規範並無強制規定null應該是什麼值。

因此,null究竟是多少,取決於JVM實現廠商。它有可能就像C語言同樣實際上是個整數0.

x在內存中是什麼呢?

如今咱們已經知道什麼是null了。變量實際上是一個存儲地址加上一個名字(標識符),能夠用來存儲一些值。那麼 x 到底在內存中的什麼位置呢?
在Java中,方法是放在當前線程的內存空間中的棧裏的,每個方法都放在這個棧的一個 (frame)當中。因此,x就存放在該方法所在的幀裏。

相關文章
相關標籤/搜索