Given the following code what will be the output?class ValHold{
        public int i = 10;
}public class ObParm{
        public static void main(String argv[]){
            ObParm o = new ObParm();
            o.amethod();
        }
        public void amethod(){
                int i = 99;
                ValHold v = new ValHold();
                v.i=30;
                another(v,i);
                System.out.print( v.i );
        }//End of amethod        public void another(ValHold v, int i){
                i=0;
                v.i = 20;
                ValHold vh = new ValHold();
                v =  vh;
                System.out.print(v.i);
        System.out.print(i);
        }//End of another}
1) 10030
2) 20030
3) 209930
4) 10020我一开始觉得是10010,又一想应该是10020,请帮分析下

解决方案 »

  1.   

    哦,是10020,another中的赋值是有效的。
      

  2.   

    我想起来了,JAVA中函数参数的传递为值传递。参数为对象时,传递的是原参数引用的拷贝,这个引用的拷贝同样会指向原对象。因此,在函数中对对象参数的修改,能够体现到原对象。
      

  3.   

    恩 这里考的是值传递和参数传递、、、
    http://blog.sina.com.cn/s/blog_70677d110100mszj.html
      

  4.   

    是10020,在another(ValHold v, int i)中 第一个参数是引用数据类型,在方法体内改变后,改变原来的值,因为指向的是同一个空间!
      

  5.   

    是10020才对啊, ValHold vh = new ValHold();
     v = vh;把v已经改变了,v.i不再是30了
      

  6.   

    我看过一本书,里面说了,java里面,参数的传递始终是值传递的。