是这样的.....amethod中调用
another(v,i); //v指向的对象(暂把它叫做对象x)中i=30
another中调用
v.i = 20; //对象x中的i=20
ValHold vh = new ValHold(); //新建一个对象y,y中的i=10
v = vh; //v指向对象y ,此时v指向的对象中i=10返还以后,在amethod中的v(和another中的变量v指向的对象不同了)指向的对象还是对象x,故它输出x中的i ,即20
another(v,i); //v指向的对象(暂把它叫做对象x)中i=30
another中调用
v.i = 20; //对象x中的i=20
ValHold vh = new ValHold(); //新建一个对象y,y中的i=10
v = vh; //v指向对象y ,此时v指向的对象中i=10返还以后,在amethod中的v(和another中的变量v指向的对象不同了)指向的对象还是对象x,故它输出x中的i ,即20
当传递简单类型时,是按值传递的。这时跟c中的实参和形参是一个概念,对形参的改变并不影响实参,例如本题中another()的形参int i。
而对于对象,是按句柄传递的,当把句柄传递给自变量时,自变量与该参数就指向同一个对象,在该方法中对对象的改变将影响作为参数的对象。
而复杂的对象传递地址(类似于指针)
7(Nomad)的回答基本上解决了我的问题。
同时也感谢大家。