在调用another()函数的时候,v的值被改变为20。 当v指向vh的时候,输出的是vh对象的值。 当函数another退出,vh销毁, 返回amethod的时候,v仍然是原来的对象,输出的就是被改变的值20。class ValHold{ public int i = 10; } class ObParm{ public void amethod(){ ValHold v = new ValHold(); System.out.println(v); another(v); System.out.println(v); System.out.println(v.i); } public void another(ValHold v){ v.i = 20; System.out.println(v); ValHold vh = new ValHold(); v =vh; System.out.println(v); System.out.println(v.i); } public static void main(String[] argv){ ObParm o = new ObParm(); o.amethod(); } }
当v指向vh的时候,输出的是vh对象的值。
当函数another退出,vh销毁,
返回amethod的时候,v仍然是原来的对象,输出的就是被改变的值20。class ValHold{
public int i = 10;
}
class ObParm{
public void amethod(){
ValHold v = new ValHold();
System.out.println(v);
another(v);
System.out.println(v);
System.out.println(v.i);
}
public void another(ValHold v){
v.i = 20;
System.out.println(v);
ValHold vh = new ValHold();
v =vh;
System.out.println(v);
System.out.println(v.i);
}
public static void main(String[] argv){
ObParm o = new ObParm();
o.amethod();
}
}
v.i = 20; 这句话虽然把v.i的值改变了
ValHold vh = new ValHold();
v =vh;这两句又从声明了一个对象并且把新的引用给了v这样v合vh就都指向了新的对象,新的对象里i的值还是10没有改变
System.out.println(v.i);这时候println的是第二回new 的对象,他的i =10
} 在括号结束的时候作为参数的v的生命周期也就结束了所以在外面的println打印的就是第一次new的v的i
这个值被v.i = 20; 这句话改变了,因为这时候v还指向第一次new 的那个对象
说得有点乱,不知道说没说明白中心思想就是,所有的都是引用,它改变的就是对象的值,不管生命周期如何