Java中BankAccount对象引用代码运行结果均为2000的原因解析
为什么b1和b2的余额最终都是2000?
核心原因是Java中对象类型的变量存储的是对象的引用(内存地址),而非对象本身,b1和b2实际上指向同一个BankAccount实例,所有操作都是对同一个对象进行的。
我们一步步拆解代码执行过程:
初始化对象
BankAccount b1 = new BankAccount(500);这行代码创建了一个余额为500的BankAccount对象,b1变量保存了这个对象在内存中的引用地址。
复制引用
BankAccount b2 = b1;这里并没有创建新的BankAccount对象,只是把b1中存储的引用地址复制给了b2。现在b1和b2指向同一个BankAccount对象,对其中任意一个变量调用方法,都会修改同一个对象的状态。
第一次存款操作
b1.deposit(b2.getBalance());b2.getBalance()获取的是当前共享对象的余额,也就是500- 调用
deposit后,对象的余额更新为500 + 500 = 1000
此时不管用b1还是b2调用getBalance(),得到的都是1000
第二次存款操作
b2.deposit(b1.getBalance());b1.getBalance()获取的是当前共享对象的余额,也就是1000- 调用
deposit后,对象的余额更新为1000 + 1000 = 2000
打印结果
因为b1和b2指向同一个对象,所以两次getBalance()返回的都是这个对象的当前余额2000,最终输出两个2000。
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

