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
相关产品推荐
相关产品推荐

