java问题求解!要有原因啊 读程序,写出和程序输出格式一致的输出结果
classValHold{publicinti=10;}publicclassObParm{publicstaticvoidmain(String[]args){ObPa...
class ValHold {
public int i = 10;
}
public class ObParm {
public static void main(String[] args) {
ObParm o = new ObParm();
o.amethod();
}
public void amethod() {
int i = 99;
Va lHold v = new ValHold();
v.i = 30;
another(v, i);
System.out.println(v.i + " " + i);
}
public void another(ValHold v, int i) {
i = 0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i + " " + i);
}
}
解释一下结果怎么来的,谢谢! 展开
public int i = 10;
}
public class ObParm {
public static void main(String[] args) {
ObParm o = new ObParm();
o.amethod();
}
public void amethod() {
int i = 99;
Va lHold v = new ValHold();
v.i = 30;
another(v, i);
System.out.println(v.i + " " + i);
}
public void another(ValHold v, int i) {
i = 0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i + " " + i);
}
}
解释一下结果怎么来的,谢谢! 展开
1个回答
展开全部
10 0
20 99
从顺序调用的角度来看,最先输出的是another方法中的println语句
在这句话里,v=vh,vh是新new出来的。所以vh.i就是v.i,vh.i就是10。方法里设置了i=0所以后一个就是0
在amethod里的println输出的,v.i因为是对象参数传入的,所以在another里对v.i的改变会反应到原来对象,所以v.i是20。i在前面定义了,是99
20 99
从顺序调用的角度来看,最先输出的是another方法中的println语句
在这句话里,v=vh,vh是新new出来的。所以vh.i就是v.i,vh.i就是10。方法里设置了i=0所以后一个就是0
在amethod里的println输出的,v.i因为是对象参数传入的,所以在another里对v.i的改变会反应到原来对象,所以v.i是20。i在前面定义了,是99
更多追问追答
追问
你不是说“vh.i就是v.i”吗?这么说v.i的值已经是10了,为什么返回时会变成20呢?
追答
v.i = 20; //这里是传入的那个v,这里是20
ValHold vh = new ValHold();
v = vh; //在这里,原来传入的v的引用已经木有了,这里是另一个东西了,所以原来的v还是保留20这个值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询