null是Java中表示“无对象引用”的关键字,仅适用于引用类型;赋值给基本类型会编译失败;包装类拆箱、字符串equals调用、集合遍历中未判空均易引发NullPointerException。

null 是 Java 中的一个关键字,表示“没有引用任何对象”,它不是对象,也不是类型,更不是 Object 的实例。它只是一个特殊的字面量值,专用于引用类型变量,用来表明该变量当前不指向堆中任何有效对象。
null 只能赋给引用类型,不能赋给基本类型
基本类型(如 int、boolean、double)有确定的默认值(0、false、0.0),它们在栈中直接存储值,无法承载 null。试图写 int i = null; 会直接编译失败。
- ✅ 正确:
String s = null;、Integer num = null;、Listlist = null; - ❌ 错误:
int x = null;、boolean flag = null;
包装类拆箱是空指针高发区
当你把 null 赋给包装类(如 Integer、Boolean),再用它参与算术运算或自动拆箱成基本类型时,JVM 会在运行时抛出 NullPointerException。
Integer i = null;-
int j = i;→ 运行时报错:NPE(因为触发了i.intValue()) - 同理:
Boolean b = null; if (b) { ... }也会崩
字符串比较和集合遍历时最容易忽略 null
用 .equals() 判断字符串时,如果调用方是 null,就会 NPE;遍历数组或集合时,若其中元素为 null,直接调用方法也会崩溃。
立即学习“Java免费学习笔记(深入)”;
- ❌ 危险写法:
str.equals("ok")(str 可能为 null) - ✅ 安全写法:
"ok".equals(str)或Objects.equals(str, "ok") - ❌ 遍历风险:
for (String s : arr) { s.trim(); }(arr 含 null 元素) - ✅ 应加判断:
if (s != null) s.trim();
null 不等于空字符串,也不等于 0 或 false
null 表示“无对象引用”,而 "" 是一个真实存在的、长度为 0 的字符串对象;0 和 false 是基本类型的合法值,有明确内存布局。
-
String a = null;→ a 没指向任何堆内存 -
String b = "";→ b 指向一个实际的空字符串对象 -
System.out.println(null == "");→ 编译不过(类型不兼容) -
System.out.println(null + "");→ 输出字符串"null"(这是字符串拼接的隐式转换)










