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);
}
}
解释一下结果怎么来的,谢谢!
展开
 我来答
幽冥神者
2012-05-14 · TA获得超过3213个赞
知道大有可为答主
回答量:1953
采纳率:50%
帮助的人:1787万
展开全部
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
更多追问追答
追问
你不是说“vh.i就是v.i”吗?这么说v.i的值已经是10了,为什么返回时会变成20呢?
追答
v.i = 20;   //这里是传入的那个v,这里是20
ValHold vh = new ValHold();
v = vh; //在这里,原来传入的v的引用已经木有了,这里是另一个东西了,所以原来的v还是保留20这个值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式