不会做的Java练习题

想知道10 0 20都是怎么来的,目前已知方法调用顺序
求详细解答,非常感谢

img

第一个10是因为another方法中创建的对象,这个对象的成员变量在初始化时被设置为了10,第二个0是因为在another方法中形参v被赋值为了0,第三个是因为在anthor方法中,对象v的成员变量被修改为20了。

测试如下:

参考链接:



class ValHold{
    public int i = 10;
}

public class ObParm {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ObParm o  = new ObParm(); // 创建ObParm类对象
        o.amethod(); // 调用这个对象的amethod方法
    }
    
    
    public void  amethod() {
        int i=99;
        ValHold v  = new ValHold(); // 创建ValHold类对象v
        v.i=30; // 将对象v的成员变量i的值修改为30
        another(v,i);  // 调用方法another(),传入对象v,和i
        
         // 3、打印对象v的成员变量i的值
        // 因为对象v的成员变量i的值在another()方法中被修改为20
        // 所以这里打印它的值就是20
        System.out.print(v.i); 
    }
    
    // https://blog.csdn.net/qq_36761831/article/details/82817803
    public void another(ValHold v ,int i) {
        
        i=0;  // 将形参变量i的值修改为0
        v.i = 20;  // 将对象v的成员变量i的值修改为20
        ValHold vh = new ValHold();  // 创建ValHold类对象vh
        v = vh;  // 将形参v赋值为vh
        
        // 1、打印对象v的成员变量i的值,因为v被赋值为vh,
        //而对象vh创建时,其成员变量i被初始化为10
        // 所以这里打印对象v的成员i的值,即打印对象vh的成员变量i的值,它的值为10
        System.out.print(v.i);
        
        // 2、打印形参i的值,因为形参i在此方法中被修改为0// 所以这里打印i的值为0
        System.out.print(i);
    }

}


img