是这样的.....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

解决方案 »

  1.   

    子程序传递参数有两种方式:按值调用和句柄调用。根据传递对象的不同,java分别使用这两种方式:
    当传递简单类型时,是按值传递的。这时跟c中的实参和形参是一个概念,对形参的改变并不影响实参,例如本题中another()的形参int i。
    而对于对象,是按句柄传递的,当把句柄传递给自变量时,自变量与该参数就指向同一个对象,在该方法中对对象的改变将影响作为参数的对象。
      

  2.   

    简单的说int,byte,boolean之类的传指
    而复杂的对象传递地址(类似于指针)
      

  3.   

    可能是我没有表达清除我的疑点。java什么时候按值传递,什么时候引用传递我是清除的。这里我的疑点在于返回amethod()后照理说v.i应该是在another()中修改好的值,即v.i=10,而实际则是20。
    7(Nomad)的回答基本上解决了我的问题。
    同时也感谢大家。