Java里的空值null是什么意思_Java null常见使用误区

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

null 是 Java 中的一个关键字,表示“没有引用任何对象”,它不是对象,也不是类型,更不是 Object 的实例。它只是一个特殊的字面量值,专用于引用类型变量,用来表明该变量当前不指向堆中任何有效对象。

null 只能赋给引用类型,不能赋给基本类型

基本类型(如 intbooleandouble)有确定的默认值(0、false、0.0),它们在栈中直接存储值,无法承载 null。试图写 int i = null; 会直接编译失败。

  • ✅ 正确:String s = null;Integer num = null;List list = null;
  • ❌ 错误:int x = null;boolean flag = null;

包装类拆箱是空指针高发区

当你把 null 赋给包装类(如 IntegerBoolean),再用它参与算术运算或自动拆箱成基本类型时,JVM 会在运行时抛出 NullPointerException

  • Integer i = n

    ull;
  • int j = i; → 运行时报错:NPE(因为触发了 i.intValue()
  • 同理:Boolean b = null; if (b) { ... } 也会崩

字符串比较和集合遍历时最容易忽略 null

.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 或 false

null 表示“无对象引用”,而 "" 是一个真实存在的、长度为 0 的字符串对象;0false 是基本类型的合法值,有明确内存布局。

  • String a = null; → a 没指向任何堆内存
  • String b = ""; → b 指向一个实际的空字符串对象
  • System.out.println(null == ""); → 编译不过(类型不兼容)
  • System.out.println(null + ""); → 输出字符串 "null"(这是字符串拼接的隐式转换)