Java 中对象引用的深层理解:为何两个变量操作同一银行账户?

本文详解 java 对象引用机制,通过 bankaccount 示例说明 b1 和 b2 实际指向同一内存对象,因此连续 deposit 操作累加作用于同一个 balance,最终输出均为 2000。

在 Java 中,类类型的变量存储的是对象的引用(reference),而非对象本身。这意味着当执行 BankAccount b2 = b1; 时,并未创建新的 BankAccount 实例,而是让 b2 指向与 b1 完全相同的堆内存地址——二者共享同一个 balance 字段。

我们逐步追踪代码执行过程(初始

状态:b1 和 b2 均引用同一对象,balance = 500):

  1. b1.deposit(b2.getBalance());
    → b2.getBalance() 返回 500
    → b1.deposit(500) 将 balance 更新为 500 + 500 = 1000
    → 此时 b1 和 b2 所指对象的 balance = 1000

  2. b2.deposit(b1.getBalance());
    → b1.getBalance() 返回当前 balance = 1000
    → b2.deposit(1000) 将 balance 更新为 1000 + 1000 = 2000
    → b1 和 b2 仍指向同一对象,balance = 2000

  3. 最终两次 getBalance() 均返回 2000,故输出:

    2000
    2000

⚠️ 关键注意事项:

  • b2 = b1 是引用赋值,不是深拷贝或新实例化;
  • 若需独立账户,应显式创建新对象:BankAccount b2 = new BankAccount(b1.getBalance());
  • 可用 == 运算符验证引用相等性:System.out.println(b1 == b2); // 输出 true

✅ 总结:Java 的引用语义意味着多个变量可协同操作同一对象状态。理解这一点,是掌握面向对象编程、避免隐蔽 Bug(如意外共享状态)的基础前提。