当前位置: 技术问答>java相关
关于值传递的问题?求教?
来源: 互联网 发布时间:2015-06-19
本文导语: Question 51) Given the following code what will be the output? class ValHold{ public int i = 10; } public class ObParm{ public static void main(String argv[]){ ObParm o = new ObParm(); o.amethod(); ...
Question 51)
Given the following code what will be the output?
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
}
1) 10030
2) 20030
3) 209930
4) 10020
正确答案:4
为什么?
在 v = vh;之后,发生了什么?此v是上面的V吗?
Given the following code what will be the output?
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
}
1) 10030
2) 20030
3) 209930
4) 10020
正确答案:4
为什么?
在 v = vh;之后,发生了什么?此v是上面的V吗?
|
4是正确的。
开始another的v和amethod的v指到同一个object...
所以v.i=20..改变了amethod的v的数值。
然后v = vh;这样改变了another的v的指向。。使它指到一个局部变量。
之后,它的变化将不影响amethod的v
开始another的v和amethod的v指到同一个object...
所以v.i=20..改变了amethod的v的数值。
然后v = vh;这样改变了another的v的指向。。使它指到一个局部变量。
之后,它的变化将不影响amethod的v