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

Java多类传值场景下已赋值变量取值返回0的问题排查

问题根源

你遇到的输出为0的核心原因是创建了两个完全独立的Third类实例,二者没有任何关联:

  • 在First类的setOne方法内部创建的Third对象是方法局部变量:调用setFive后正确存入了计算得到的p值,但方法执行结束后这个局部对象就销毁了,外部无法访问到这个实例。
  • 在main方法中单独创建的Third对象是全新实例:从未调用过setFive赋值,int类型成员变量默认初始值为0,因此调用getFive返回0。
修复方案

可以将First类中创建的Third实例存储为成员变量,对外提供获取方法,避免重复新建Third实例,修改后代码如下:

class First {
    int x, y, z;
    // 新增成员变量存储Third实例
    Third thirdObj;

    void setOne(int a, int b, int c) {
        a = a + x;
        b = b + y;
        c = c + z;
        thirdObj = new Third();
        thirdObj.setFive(a, b, c);
    }

    // 新增方法对外返回已赋值的Third实例
    public Third getThirdObj() {
        return thirdObj;
    }

    void two(int a) {
        this.x = a;
    }

    void three(int a) {
        this.y = a;
    }

    void four(int a) {
        this.z = a;
    }
}

class Second {
    public static void main(String args[]) {
        First f = new First();
        f.two(100);
        f.three(150);
        f.four(170);
        f.setOne(1, 2, 3);
        // 直接从First实例中获取已经完成赋值的Third对象
        System.out.println(f.getThirdObj().getFive());
    }
}

class Third {
    int p;

    public void setFive(int a, int y, int n) {
        this.p = a + y + n;
    }

    public int getFive() {
        return p;
    }
}

修改后运行输出结果为426,符合预期计算结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:09:00