源代码
主程序
public class Test1 {
public void amethod(){
ValHold v=new ValHold();
another(v);
System.out.println(v.i);
}
public void another(ValHold v) {
// TODO 自动生成方法存根
v.i=20;
ValHold vh=new ValHold();
v=vh;
System.out.println(v.i);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Test1 t=new Test1();
t.amethod();
}
}
辅助类;
package com.hf.scjp.reference.test1;
public class ValHold {
public int i=10;
}
-----------------------20060608--------------------------------------------------
当一个引用变量作为参数传递给一个方法时,在这个方法内部可以改变变量的值,即改变引用指向的对象;
但是当方法调用结束后,该变量恢复原来的值,即变量仍然指向原来的对象。即another调用结束时,v又回复到
ValHold v=new ValHold();时指向的地址空间了。
但是当在方法内部改变了引用指向的对象的数据:v.i=20;
那么当调用方法结束之后(another),尽管引用仍然指向原来的对象,但这个对象的属性已经被改变了,所以调用方法结束后,v.i已经变成了20.