You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中BankAccount对象引用代码运行结果均为2000的原因解析

为什么b1和b2的余额最终都是2000?

核心原因是Java中对象类型的变量存储的是对象的引用(内存地址),而非对象本身,b1和b2实际上指向同一个BankAccount实例,所有操作都是对同一个对象进行的。

我们一步步拆解代码执行过程:

  1. 初始化对象

    BankAccount b1 = new BankAccount(500);
    

    这行代码创建了一个余额为500的BankAccount对象,b1变量保存了这个对象在内存中的引用地址。

  2. 复制引用

    BankAccount b2 = b1;
    

    这里并没有创建新的BankAccount对象,只是把b1中存储的引用地址复制给了b2。现在b1和b2指向同一个BankAccount对象,对其中任意一个变量调用方法,都会修改同一个对象的状态。

  3. 第一次存款操作

    b1.deposit(b2.getBalance());
    
    • b2.getBalance()获取的是当前共享对象的余额,也就是500
    • 调用deposit后,对象的余额更新为500 + 500 = 1000
      此时不管用b1还是b2调用getBalance(),得到的都是1000
  4. 第二次存款操作

    b2.deposit(b1.getBalance());
    
    • b1.getBalance()获取的是当前共享对象的余额,也就是1000
    • 调用deposit后,对象的余额更新为1000 + 1000 = 2000
  5. 打印结果
    因为b1和b2指向同一个对象,所以两次getBalance()返回的都是这个对象的当前余额2000,最终输出两个2000。

内容的提问来源于stack exchange,提问作者unknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:55:18