Java 引用、对象、别名与 null

把每个引用变量看成一张写着“对象引用值”的便签。改写便签不会复制对象;多张便签写着同一个引用值时,它们就是别名。

操作引用

当前引用:a
选择当前引用

创建一个新对象

最多保留 3 个对象。重新赋值后,旧对象可能变成“不可达”。

复制引用

调用与断开

栈引用 → 堆对象

实线箭头表示“引用当前指向”
对象数:0 / 3

引用变量

BankAccount 对象

赋值复制的是引用

b = a 只让两张便签保存同一个对象的引用值,不会复制 BankAccount

别名共享对象状态

ab 指向同一对象,借任一引用存款,另一引用读取到的也是新余额。

null 代表“不指向对象”

引用变量可以保存 null;通过它访问字段或方法时,会触发 NullPointerException

检查你的内存模型

建议先加载“小林账户”场景,再回答。答案会根据当前白板状态校验。

挑战一:对象到底有几个?

执行 a = new BankAccount(...); b = a; c = null; 后,堆中创建了几个对象?

选择一个答案后校验。

挑战二:谁会看到 350?

在预设场景中执行 b.deposit(50) 后,哪些引用读取时会看到余额 350?

可先选择 b,再点击 deposit(50) 观察。

BankAccount a = new BankAccount("小林", 300);
BankAccount b = a;   // 复制引用,不复制对象
BankAccount c = null;
b.deposit(50);       // a.balance 与 b.balance 都是 350