null 是關鍵字,區分大小寫Object obj = null; // 正確
Object obj = NULL; // 編譯錯誤
Object obj = Null; // 編譯錯誤
nullprivate static Object myObj;
public static void main(String[] args) {
System.out.println(myObj); // 輸出 null
}
局部變量必須顯式初始化,否則編譯報錯。
null 不是對象,也不是類型,只是特殊字面值可賦值給任意引用類型,也可強制轉型為任意引用類型,編譯運行均不報錯:
String s = (String) null;
Integer i = (Integer) null;
null 賦給基本類型變量int i = null; // 編譯錯誤
Integer wrapper = null;
int j = wrapper; // 編譯通過,運行拋出 NullPointerException (自動拆箱)
null 會拋出 NPEMap<Integer, Integer> map = new HashMap<>();
map.put(1, null);
int val = map.get(1); // NPE 於此行
常見於 Map.get(key) 返回 null 後直接賦值給基本類型。
instanceof 檢查 null 返回 falseInteger i = null;
System.out.println(i instanceof Integer); // false
利用此特性可安全進行類型檢查後再轉型。
null 引用調用,實例方法不能Test t = null;
t.staticMethod(); // 正常執行(靜態綁定)
t.instanceMethod(); // NPE
null,建議編寫「空安全」方法public void print(Object obj) {
if (obj == null) { System.out.println("null"); return; }
System.out.println(obj.toString());
}
print(null); // 優雅處理
== 和 != 可比較 null,其他運算符不可String a = null, b = null;
System.out.println(a == b); // true
System.out.println(a != b); // false
// System.out.println(a > null); // 編譯錯誤
與 SQL 不同,Java 中 null == null 為 true。
null 語義,避免盲目調用實例方法/字段。Optional (Java 8+) 替代顯式 null 傳遞。-Xlint:null)與靜態分析工具(SpotBugs, SonarQube)。