讓我們從下面的聲明開始吧:
String x = null;
上面的聲明到底做了什么盈咳?
回憶一下耿眉,什么是變量,什么是值鱼响?通常把變量比作一個箱子鸣剪,就像你可以用箱子裝一些東西那樣,您可以用變量來保持一個值丈积。當聲明一個變量的時候筐骇,我們需要設(shè)置變量的類型。
Java中有兩種主要的類型:基本數(shù)據(jù)類型和引用類型江滨。變量就可以聲明為基本數(shù)據(jù)類型也可以聲明為引用類型铛纬。在這種情況下,初始化聲明聲明了一個變量"X"唬滑,“X” 保存了一個字符串的引用告唆,這里的引用是null棺弊。
下面的圖片給了我們一個對這個概念更加清晰的理解。
如果 x="abc"悔详,它看上去應(yīng)該像下面這樣:
2.null在內(nèi)存中到底是什么呢镊屎?
null在內(nèi)存中到底是什么呢?或者說null值在Java中是什么呢茄螃?
首先缝驳,null不是有效的對象實例,所以不需要為它分配內(nèi)存空間归苍,它僅僅只是一個表明該引用目前沒有指向任何對象的值用狱。
JVM規(guī)范中有這么一句話:
The Java Virtual Machine specification does not mandate a concrete value encoding null.
JVM規(guī)范沒有指明一個編碼為null的具體值。
它表現(xiàn)為像C語言中的0地址那樣的東西拼弃。
3.x在內(nèi)存中到底是什么呢夏伊?
現(xiàn)在我們知道了null是什么東西了,此外吻氧,我們也知道了變量是一個保存了一些值的存儲空間的地址溺忧。那么x到底在內(nèi)存的哪個地方呢?
從“JVM運行時的數(shù)據(jù)存儲區(qū)”示意圖中我們知道盯孙,既然每一個方法在線程棧中都有一個私有的棧幀鲁森,本地變量被放在棧幀中。
引用:
1.變量振惰,操作符號和表達式
2.變量
3.JVM規(guī)范