天天看點

執行個體說明Java中的null

讓我們先來看下面的語句:

  String x = null;

  1. 這個語句到底做了些什麼?

  讓我們回顧一下什麼是變量,什麼是變量值。一個常見的比喻是 變量相當于一個盒子。如同可以使用盒子來儲存物品一樣,您可以使用一個變量來存儲一個值。當聲明一個變量時,我們需要設定其類型。

  在Java中變量分為兩大類型: 原始值(primitive)與引用值(reference).

  聲明為原始類型的變量,存儲的是實際的值;聲明為引用類型的變量,存儲的是實際對象的位址(指針,引用).

  在上面的語句中, 初始化語句定義了一個變量 "x". x中存放的是String引用,此處為 null.

  下圖對此概念提供了更形象的說明:

執行個體說明Java中的null

  如果 x = "abc",則引用示意圖如下:

執行個體說明Java中的null

  2. 在記憶體中null具體是什麼?

  在Java中 null 值是什麼,在記憶體中null是什麼?

  首先需要明确,null不是一個合法的object執行個體,是以并沒有為其配置設定記憶體.

  null 僅僅用于表明該引用目前沒有指向任何對象。

  我們看看 JVM規範 的描述:

  Java虛拟機規範并不強制要求使用一個具體的值編碼null。

  我認為和其它類C語言一樣,null是對引用變量的值全部置0。

  譯者注: Java對象的屬性域預設初始化其實很簡單,把配置設定的記憶體所有位全部置0,是以 數字是0, boolean是false, 浮點是 0.0f, 引用是 null, 因為引用是記憶體位址,是以可以推測出 null 實際上就是一堆0. 用滑鼠手想一想也就明白, 位址 0 肯定是不可以存放任何對象的。

最新内容請見作者的GitHub頁:http://qaseven.github.io/