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

Java方法重载问题:带参构造器赋值异常导致返回值错误求助

解决Java带参构造器参数传递失效的问题

嘿,我一眼就发现你代码里的问题啦!你的DebugBox带参构造器里犯了一个新手常遇到的变量名冲突错误,导致参数根本没赋值给类的成员变量。

问题根源

在带参构造器里,你写的是:

public DebugBox(int width, int length, int height) {
    width = width;
    length = length;
    height = height;
    getVolume();
}

这里的width、length、height既是构造器的参数(局部变量),也是类的成员变量。Java里局部变量的优先级高于成员变量,所以width = width其实是把参数的值赋值给它自己,完全没碰类的成员变量!而类的成员变量默认初始值是0,所以最后输出的长宽高和体积都是0。

反观你的无参构造器,直接给成员变量赋值,没有重名问题,所以能正常工作:

public DebugBox() {
    length = 1;
    width = 1;
    height = 1;
}

修复方案

有两种简单的修复方式:

方式1:使用this关键字区分成员变量和参数

this代表当前对象的引用,用它来明确指定要赋值的是类的成员变量:

public DebugBox(int width, int length, int height) {
    this.width = width;
    this.length = length;
    this.height = height;
    // 这里调用getVolume()其实没必要,因为showVolume方法会主动调用它计算
}

方式2:修改参数名,避免重名

比如给参数加个前缀,比如w、l、h,这样就不会和成员变量混淆了:

public DebugBox(int w, int l, int h) {
    width = w;
    length = l;
    height = h;
}

额外小建议

你在带参构造器里调用getVolume()其实没什么作用,因为这个方法只是计算并返回体积,你既没接收返回值也没做其他操作,完全可以删掉这行代码。当showVolume方法调用aBox.getVolume()时,会实时计算当前对象的体积,这样更合理。

修复后再运行代码,box2的长宽高就会是你传入的12、10、8,体积也会正确计算为960啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:03:15