public void another(ValHold v1, int i){
i=0;
v1.i = 20;
ValHold vh = new ValHold();
v1 = vh;
System.out.println(v1.i+ " "+i);
}
这样看是不是好点
相当于
v1=v,指向同一地址
所以v1.i=20时,v.i也为20
v1=vh后,和v就不指向同一地址了,但v仍然是存在的
所以
v1.i=10
而
v.i=20你可以用
System.out.println(v.toString());
查看v地址的变化情况。
i=0;
v1.i = 20;
ValHold vh = new ValHold();
v1 = vh;
System.out.println(v1.i+ " "+i);
}
这样看是不是好点
相当于
v1=v,指向同一地址
所以v1.i=20时,v.i也为20
v1=vh后,和v就不指向同一地址了,但v仍然是存在的
所以
v1.i=10
而
v.i=20你可以用
System.out.println(v.toString());
查看v地址的变化情况。
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;
ValHold v = new ValHold();
v.i=30;
another(v,i); //改变了对象v里面的i,不是这里的i,输出20
System.out.println(v.i);
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh; //把对象转换成对象vh,v.i就是10
System.out.println(v.i+ " "+i); //i是这里的变量0
}
}
当程 序执行到another(v,i)时,给函数another传入了对象v的指针
这时候,相当于有两个指针指向对像v,为了便于理解,把做为参数传过去的指针叫做v1。
在 another(v,i)函数中的v.i = 20语句时,v与v1指向的还是同一个地址,它们的i值都是20
到了下一句v = vh的时候 ,实际上就是改变了指针v1的指向,v1就指向了vh的地址,i值为10,
而此时,v还保持不变,所以还是20不知道说得是否明白