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

Java项目中Deposit类构造方法赋值后balance仍为0的问题

问题分析与解决方案:Deposit类balance返回0但checkBalance正常的原因

咱们直接说核心问题:你遇到的差异是因为Deposit类的balance字段是构造时一次性赋值的快照,而checkBalance()是实时读取Student的cash值。

具体执行流程拆解

看你的代码步骤:

  1. 先执行students[i]=new Student();,此时Student的cash是默认值0(int类型成员变量默认初始化值为0)。
  2. 紧接着创建deposit[i]=new Deposit(students[i]);,Deposit构造函数里把this.balance赋值为student.getCash()——也就是当时的0。
  3. 之后你才调用students[i].setCash(1000);修改了Student的cash,但Deposit里的balance还是之前的0,不会自动跟着更新。
  4. 而checkBalance()方法每次调用都会直接调用student.getCash(),所以能拿到最新的1000。

修复方案

最简单的解决方式是让Deposit的getBalance()直接读取Student的实时cash值,去掉冗余的balance字段(或者让它同步):

方案一:移除冗余的balance字段,实时获取

修改Deposit类的getBalance()方法:

public int getBalance() { 
    return this.student.getCash(); 
}

这样每次调用getBalance()都会拿到Student当前的cash值,和checkBalance()的结果保持一致。

方案二:同步更新balance(耦合性较高,不推荐)

如果你一定要保留balance字段,可以在Student的setCash()方法里添加逻辑通知Deposit更新,或者每次修改Student的cash后手动调用Deposit的setBalance(),但这种方式会让两个类的耦合度变高,不如方案一简洁。

额外小建议

你的Main类里创建了两个Scanner对象(input和n),其实完全没必要,用一个Scanner就可以处理所有输入,避免潜在的输入读取异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:37:31