引用变量声明不等于创建对象,仅分配栈空间存地址占位符,默认值为null(成员变量)或未初始化(局部变量);初始化需new或字面量赋值;null是引用类型合法值,但调用前须判空以防NullPointerException;主动置null有助于GC回收和避免内存泄漏。
引用类型变量声明时,不等于创建对象;它只是告诉编译器“我将来会指向一个某类的对象”,但此刻内存中可能什么也没有。是否初始化、如何处理 null,直接影响程序健壮性。
声明引用变量只是分配栈空间存一个“地址占位符”,比如:
String name;
这行代码没在堆中创建字符串,name 的值默认就是 null(成员变量)或未定义(局部变量,必须显式初始化才能使用)。
只有用 new 或字面量赋值才算初始化:
String name = new String("Alice");
String name = "Alice";
所有引用类型成员变量(类字段)自动初始化为 null,这是 JVM 规范行为。
- 局部变量不会自动赋 null,未初始化就使用会编译报错
- 基本类型永远不能是 null,int/boolean 等有各自默认值(0/false),但包装类(Integer、Boolean)可以为 null
- 把 null 赋给引用变量,表示“当前不指向任何有效对象”
调用方法或访问属性前,若引用为 null,直接触发 NullPointerException。
常见安全做法包括:
主动赋 null 不只是为了清空变量,更是一种资源管理信号:
- 告诉 GC:“这个对象我不再需要了”,加快垃圾回收(尤其大对象或长生命周期引用)
- 在缓存、监听器、数据库连接等场景中,及时置 null 可防止内存泄漏
- 注意:局部变量离开作用域后自动失效,无需手动设 null;重点在成员变量或静态引用上