Translate from Simple java
Java中的null值是什麼?
讓我們從一個變量聲明開始:
String x = null;
1. 這個變量聲明做了什麼?
回憶一下什麼是變量,什麼是值。一個常用的比喻是,變量就如同一個盒子,跟我們可以用盒子存儲東西一樣,我們可以用變量來存值。當聲明一個變量時,我們需要設定它存儲的類型。
Java中有兩個主要的數值類型:基本型和引用型。基本類型的變量存儲值;引用類型的變量存儲對象的引用(即對象在內存中地址)。在這個例子中,初始化聲明的變量“x”爲引用型變量,它存儲String的引用。在這裏它爲null。
下面的圖更好的展示了這個概念:
如果x=”abc”
2. null在內存中是什麼?
那麼,準確來說,null在內存中到底是什麼呢?或者說Java中null的值是什麼?
首先,null不是一個有效的對象實例,所以沒有內存會分配給它。它僅僅是一個表示引用現在沒有分配給這個對象的值。
Java虛擬機規範並沒有規定一個確定的值來表示null
具體的值要看jvm實現產商,所以我可以假定任何一個值來表示null,譬如和c語言一樣,用全0來表示。
3. null在內存的什麼地方?
現在我們知道了null是什麼,我們也知道了變量就是一個存儲單元加上一個名字(標識符),可以用來放值。那麼x到底在內存的哪個位置呢?
從the diagram of jvm run-time data areas我們可以知道,方法都放在當前線程空間的棧中,而每一個方法放在棧中一個私有的幀裏面,所以這個變量放在幀當中。