expalin以下java程序的输出

expalin以下java程序的输出,java,parameter-passing,Java,Parameter Passing,请查看以下代码: public class SampleClass{ String name; public SampleClass(){ } public void setName(String s){ name = s; } public String getName() { return name; }

请查看以下代码:

public class SampleClass{
        String name;
        public SampleClass(){

        }
        public void setName(String s){
            name = s;
        }
        public String getName()
        {
            return name;
        }
        public static void main(String d[]){
            PojoClass p = new PojoClass();
            SampleClass s = new SampleClass();
            s.setName("jack");
            System.out.println(s.getName());
            p.setSample(s);
            System.out.println(p.getSample().getName());
            s.setName("Fgk");
            System.out.println(p.getSample().getName());
            p.recMod(s);
            System.out.println(p.getSample().getName());
            p.changeVal(s);
            System.out.println(p.getSample().getName());
        }
    }

    class PojoClass{
        SampleClass s;
        public void setSample(SampleClass d){
            s=d;
        }
        public SampleClass getSample()
        {
            return s;
        }
        public void recMod(SampleClass s){
            SampleClass g = new SampleClass();
            s=g;
            //g.setName("FGH");
            s.setName("hjk");
        }
        public void changeVal(SampleClass s){
            s.setName("hjkjkl;k;k");
        }

    }
我正在尝试运行这段代码,但无法理解为什么在调用recMod()方法时将输出作为Fgk。 另外,如果我取消注释g.setName(“FGH”),那么输出也将保持不变。

您正在将名称“hjk”分配给传递到recMod的
SampleClass s
对象,该对象将隐藏类成员
s
。将其更改为
this.s=g
;您将改为设置类成员的名称