当前位置: 技术问答>java相关
一道JAVA认证考试试题,有点想不通,各位看看...
来源: 互联网 发布时间:2015-04-05
本文导语: 题目如下: class ValHold{ public int i = 10; } public class ObParm { public static void main(String argv[]) { ObParm o = new ObParm(); o.amethod(); } public void amethod() { ...
题目如下:
class ValHold{
public int i = 10;
}
public class ObParm
{
public static void main(String argv[])
{
ObParm o = new ObParm();
o.amethod();
}
public void amethod()
{
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println(v.i);
} //End of amethod
public void another(ValHold v, int i)
{
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
} //End of another
}
正确输出结果为:
10 0
20
但最后一个20我有点想不通,各位帮我解释解释! 谢谢!!
class ValHold{
public int i = 10;
}
public class ObParm
{
public static void main(String argv[])
{
ObParm o = new ObParm();
o.amethod();
}
public void amethod()
{
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println(v.i);
} //End of amethod
public void another(ValHold v, int i)
{
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
} //End of another
}
正确输出结果为:
10 0
20
但最后一个20我有点想不通,各位帮我解释解释! 谢谢!!
|
public void amethod()
{
int i = 99;
ValHold v = new ValHold(); //这里产生了第一个ValHold对象A,v是指向A的reference,假设v的值是X
v.i=30; //A的i变为30
another(v,i); //v和i把他们的值复制了一份交给another(),分别是X和99
System.out.println(v.i); //输出A的i
} //End of amethod
public void another(ValHold v, int i)
{ //该函数的参数v、i只相当于两个局部变量,他们的生存期只到该函数执行完
//上面调用该函数时将两个值X和99分别传给了v和i
i=0;
v.i = 20; //v的值仍为X,也就意味着他仍指向对象A,A的i变成了20
ValHold vh = new ValHold(); //这里产生了第二个ValHold对象B,vh是指向B的reference,假设vh的值是Y
v = vh; //v的值变成了Y——注意!对象A并未改变
System.out.println(v.i+ " "+i); //输出B的i以及局部变量i
} //End of another
microibm():不知以上是否解释清楚了。
{
int i = 99;
ValHold v = new ValHold(); //这里产生了第一个ValHold对象A,v是指向A的reference,假设v的值是X
v.i=30; //A的i变为30
another(v,i); //v和i把他们的值复制了一份交给another(),分别是X和99
System.out.println(v.i); //输出A的i
} //End of amethod
public void another(ValHold v, int i)
{ //该函数的参数v、i只相当于两个局部变量,他们的生存期只到该函数执行完
//上面调用该函数时将两个值X和99分别传给了v和i
i=0;
v.i = 20; //v的值仍为X,也就意味着他仍指向对象A,A的i变成了20
ValHold vh = new ValHold(); //这里产生了第二个ValHold对象B,vh是指向B的reference,假设vh的值是Y
v = vh; //v的值变成了Y——注意!对象A并未改变
System.out.println(v.i+ " "+i); //输出B的i以及局部变量i
} //End of another
microibm():不知以上是否解释清楚了。
|
......
public void another(ValHold v, int i)
{
i=0;
v.i = 20;//
public void another(ValHold v, int i)
{
i=0;
v.i = 20;//