当前位置: 技术问答>java相关
SCJP的问题
来源: 互联网 发布时间:2015-08-11
本文导语: 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.print( v....
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.print( 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.print(v.i);
System.out.print(i);
}//End of another
}
这段程序问你输出。输出是10020。为什么返回到amethod()后v.i是20而不是10?
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.print( 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.print(v.i);
System.out.print(i);
}//End of another
}
这段程序问你输出。输出是10020。为什么返回到amethod()后v.i是20而不是10?
|
是这样的.....
amethod中调用
another(v,i); //v指向的对象(暂把它叫做对象x)中i=30
another中调用
v.i = 20; //对象x中的i=20
ValHold vh = new ValHold(); //新建一个对象y,y中的i=10
v = vh; //v指向对象y ,此时v指向的对象中i=10
返还以后,在amethod中的v(和another中的变量v指向的对象不同了)指向的对象还是对象x,故它输出x中的i ,即20
amethod中调用
another(v,i); //v指向的对象(暂把它叫做对象x)中i=30
another中调用
v.i = 20; //对象x中的i=20
ValHold vh = new ValHold(); //新建一个对象y,y中的i=10
v = vh; //v指向对象y ,此时v指向的对象中i=10
返还以后,在amethod中的v(和another中的变量v指向的对象不同了)指向的对象还是对象x,故它输出x中的i ,即20