Java中,null是一個關鍵字,用來標識一個不肯定的對象。所以能夠將null賦給引用類型變量,但不能夠將null賦給基本類型變量。好比咱們在定義一個變量的時候咱們經過會這樣作:XXXX xxxx = null;在須要賦值的時候xxx = new XXXX();咱們知道咱們在定義變量的時候,java會給其賦一個初始化的值,通常的基本類型中整數類型int、byte、short、long的自動賦值爲0,帶小數點的float、double自動賦值爲0.0,boolean的自動賦值爲false,而引用類型變量自動賦值爲null。須要注意的是不能將 null 賦給原始類型(byte、short、int、long、char、float、double、boolean)變量。java
先看段代碼以及運行結果函數
package com.test; public class NullTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub if (null instanceof Object) { System.out.println("null是Object類型"); } else { System.out.println("null不是Object類型"); } } }
毫無疑問結果是:null不是Object類型測試
首先看下代碼,能夠猜想下具體的執行結果,指針
package com.test; public class NullTest { public static String str = "nullString測試"; /** * @param args */ public static void main(String[] args) { System.out.println("************ "); System.out.println(((NullTest)null).str+" 來自於靜態變量"); System.out.println("************ "); ((NullTest)null).printStr(); System.out.println("************ "); } public static void printStr(){ System.out.println(str+" 來自於靜態函數"); } }
執行結果是:對象
************ nullString測試 來自於靜態變量 ************ nullString測試 來自於靜態函數 ************
沒有錯誤,這段代碼能夠正確的運行而且獲取咱們指望的結果;簡單解析下:由於null值能夠強制轉換爲任何java類類型,(String)null也是合法的。但null強制轉換後是無效對象,其返回值仍是爲null,而static方法的調用是和類名綁定的,不借助對象進行訪問因此能正確輸出。反過來,沒有static修飾就只能用對象進行訪問,使用null調用對象確定會報空指針錯了。blog
若是咱們想快速的釋放對象所佔的內存資源而不是指望GC和在合適的時候才掃描清除掉,咱們就可使用null。讓一個非null的引用類型變量指向null。這樣這個對象就再也不被任何對象應用了,等待JVM垃圾回收機制去回收。也就是說將 null 賦給非原始變量至關於釋放該變量先前所引用的對象。內存