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;
int b= 0;
ValHold v =new ValHold();
System.out.println(v.i);//10
System.out.println(i); //99
v.i=30;
b=v.i;
another(v,b);
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);
}//End of another
}
/*正确答案:
10
99
10
20
请问为什么不是
10
99
10
30
*/
public void another(ValHold v,int i){
i=0;
v.i=20;
ValHold vh =new ValHold();
v = vh;
System.out.println(v.i); }
another函数中的v首先指向主函数中的V,然后v.i被改为20,最后another函数中的v又指向vh,此时主函数中的v.i已经被改为了20
好好理解下,理解透了就理解了传值和传引用了
本人觉得java中都是传值,不存在传引用,那样会更好理解一些东西
public void another(ValHold v,int i)
{
i=0;
v.i=20;
ValHold vh =new ValHold();
v = vh;
System.out.println(v.i);
}
v.i已经是20了,没有改变,所以最后打印出的是20
这只是考查了一个引用关系
public void another(ValHold v,int i){
i=0;
v.i=20;
//到此时,这里的v与amethod中的v指向同一个对象,因此v.i = 20改变了该对象的i,也就是说amethod中的v.i已经变为20,而不是30了。
ValHold vh =new ValHold();
v = vh;
//现在,v与amethod中的v指向了不同的ValHold对象,这里的v.i = 10, 而amethod中的v.i仍为20 System.out.println(v.i);
}//End of another所以打印出的自然就是
10
90
10
20