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

Java中访问新建内部类实例属性全为0,是什么原因导致的?

问题原因

核心原因是变量名遮蔽(Variable Shadowing):当构造函数的参数名和类的成员变量名完全一致时,方法作用域内的同名参数优先级更高,你编写的nb = nb、piece = piece、length = length本质是把参数的值赋值给参数本身,类的成员变量全程没有被赋值。Java中int类型的成员变量默认初始值为0,因此最终打印结果全部为0。

解决方案

有两种常用的修复方式:

方式1:用this关键字明确指定成员变量

this指代当前类的实例对象,加上this.前缀即可明确标识要赋值的是类的成员变量,而非参数:

public Build(int nb, int piece, int length){
    // 调试中可以看到参数值已经传入,但在方法中打印属性时输出全为0
    this.nb = nb;
    this.piece = piece;
    this.length = length;
}

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

给参数增加区分度的前缀/后缀,避免和成员变量同名,从根源上避免遮蔽问题:

public Build(int inputNb, int inputPiece, int inputLength){
    nb = inputNb;
    piece = inputPiece;
    length = inputLength;
}

补充建议

如果没有特殊业务需求,建议给类的成员变量添加private访问修饰符,仅通过类提供的getter/setter方法访问内部属性,降低类的耦合度,提升代码安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:18:02