null是Java中表示“无对象引用”的关键字,仅适用于引用类型;赋值给基本类型会编译失败;包装类拆箱、字符串equals调用、集合遍历中未判空均易引发NullPointerException。
null 是 Java 中的一个关键字,表示“没有引用任何对象”,它不是对象,也不是类型,更不是 Object 的实例。它只是一个特殊的字面量值,专用于引用类型变量,用来表明该变量当前不指向堆中任何有效对象。
基本类型(如 int、boolean、double)有确定的默认值(0、false、0.0),它们在栈中直接存储值,无法承载 null。试图写 int i = null; 会直接编译失败。
String s = null;、Integer num = null;、List list = 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) { ... } 也会崩用 .equals() 判断字符串时,如果调用方是 null,就会 NPE;遍历数组或集合时,若其中元素为 null,直接调用方法也会崩溃。
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 的字符串对象;0 和 false 是基本类型的合法值,有明确内存布局。
String a = null; → a 没指向任何堆内存String b = ""; → b 指向一个实际的空字符串对象System.out.println(null == ""); → 编译不过(类型不兼容)System.out.println(null + ""); → 输出字符串 "null"(这是字符串拼接的隐式转换)