Java中类是引用数据类型,变量存储对象在堆中的地址而非对象本身;声明如Person p;仅创建null引用,需new Person()在堆中创建实例并赋地址;多引用可指向同一对象,修改共享数据;方法传参传递地址副本,可改对象状态但不能改变原引用指向;==比较地址,equals默认比地址、通常重写为逻辑比较。

Java 中的类是引用数据类型,这意味着变量存储的是对象在堆内存中的地址,而不是对象本身。理解这一点对正确使用对象、避免空指针异常、理解参数传递机制至关重要。
类变量声明与对象创建分离
声明一个类类型的变量(如 Person p;)只是创建了一个引用,此时它不指向任何对象,值为 null。必须通过 new 显式创建实例,才能让引用指向堆中的一块实际内存:
- Person p; —— 引用存在,但未初始化,不能调用方法或访问字段
- p = new Person(); —— 在堆中分配内存,构造对象,并将地址赋给 p
- Person p = new Person(); —— 声明和初始化合并写法,效果相同
多个引用可指向同一个对象
因为类变量保存的是地址,所以可以将一个引用赋值给另一个变量,它们便共享同一份对象数据:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- Person a = new Person("Alice");
- Person b = a; —— b 和 a 指向同一个 Person 实例
- 修改 b.setName("Bob"),a.getName() 也会返回 "Bob"
- 这不同于基本类型(如 int),后者赋值是值拷贝
方法传参体现引用本质
当把类类型变量作为参数传入方法时,传递的是引用的副本(即地址的拷贝),不是对象本身,也不是引用的引用:
立即学习“Java免费学习笔记(深入)”;
- 方法内可借助该引用修改对象状态(如 person.setAge(25)),原对象会受影响
- 但若在方法内让形参指向新对象(如 person = new Person();),不会改变实参原来的指向
- 简记:传的是“地址的副本”,能改内容,不能改原引用所指的对象身份
判断相等需区分 == 与 equals()
对类类型变量使用 == 比较的是两个引用是否指向同一内存地址;而 equals() 默认行为也是地址比较,但通常被重写为逻辑相等(如比较姓名、ID 等字段):
- p1 == p2 → 是否为同一个对象(内存地址相同)
- p1.equals(p2) → 是否为“内容相同”的不同对象(需确保类已重写 equals 方法)
- 未重写 equals 时,即使两个 Person 字段完全一样,equals 仍可能返回 false

















