1. null設計初衷: 是爲了表示一些缺失的東西,例如缺失的用戶、資源或其餘東西。算法
2. null是Java中的關鍵字,像public、static、final。它是大小寫敏感的。安全
3. Java中的任何引用變量都將null做爲默認值。spa
4. null既不是對象也不是一種類型,它僅是一種特殊的值,你能夠將其賦予任何引用類型,但不能將null賦給基本類型變量。你也能夠將null轉化成任何類型。設計
5. 可是若是將null賦值給包裝類object,而後將object賦給各自的基本類型,編譯器不會報,可是你將會在運行時期遇到空指針異常。這是Java中的自動拆箱致使的。指針
6. 任何含有null值的包裝類在Java拆箱生成基本數據類型時候都會拋出一個空指針異常。對象
7. 若是使用了帶有null值的引用類型變量,instanceof操做將會返回false。這是instanceof操做一個很重要的特性,使得對類型強制轉換檢查頗有用。資源
8. 你可能知道不能調用非靜態方法來使用一個值爲null的引用類型變量。它將會拋出空指針異常,可是你可能不知道,你能夠使用靜態方法來使用一個值爲null的引用類型變量。由於靜態方法使用靜態綁定,不會拋出空指針異常。編譯器
9. 你能夠將null傳遞給方法使用,這時方法能夠接收任何引用類型,例如public void print(Object obj)能夠這樣調用print(null)。從編譯角度來看這是能夠的,但結果徹底取決於方法。Null安全的方法,如在這個例子中的print方法,不會拋出空指針異常,只是優雅的退出。若是業務邏輯容許的話,推薦使用null安全的方法。編譯
10. 你能夠使用==或者!=操做來比較null值,可是不能使用其餘算法或者邏輯操做,例如小於或者大於。跟SQL不同,在Java中null==null將返回true變量
原文地址:http://mp.weixin.qq.com/s/PTBS9rgb1EVQtaRD3rB_uA