public class Sales {
public static void main(String[] args){
Sales sl=new Sales();
sl.amethod();
System.out.println();

}
public void amethod(){
int i=99;
V v=new V();
v.i=30;
another(v,i);
System.out.println(v.i);

}
public void another(V v,int i){
i=0;
v.i=20;
V v2=new V();
v=v2;

System.out.println(v.i);
System.out.println(i);
}
}为什么输出是10 0 20呢?
为什么在main函数里面输出v.i是20?v不是在another里面被修改为指向v2了吗?java

解决方案 »

  1.   

    这是参数传递的问题啊,只要记住一个"java在参数都是用的值传递(包括数值与引用值)"
    比如:
    ……
    public void another(V v,int i){
            i=0;
            v.i=20;
            V v2=new V();
            v=v2;
             
            System.out.println(v.i);
            System.out.println(i);
        }
    ……上面这段 参数v 与i 传过来 都是引用值  
    修改方法体中的v的值 不会影响原v的值。
      

  2.   

    public static void main(String[] args){
            Sales sl=new Sales();
            sl.amethod();
            Sales s2=new Sales();
            s2.amethod1();
        }
        public void amethod(){
            int i=99;
            V v=new V();
            v.i=30;
            another(v,i);
            System.out.println(v);
            System.out.println(v.i);
             
        }
        public void another(V v,int i){
            i=0;
            v.i=20;
            V v2=new V();
            v=v2;
            System.out.println(v);
            System.out.println(v2);
            System.out.println(v.i);
            System.out.println(i);
      }运行结果:
    dao04.V@16caf43
    dao04.V@16caf43
    10
    0
    dao04.V@66848c
    20形参的问题, public void another(V v,int i)中的v是局部变量,你并没有将值赋给v
    如果你这样:
    main中:v=another(v,i); public V another(V v,int i){
            i=0;
            v.i=20;
            V v2=new V();
            v=v2;
            return v;
      }
    那么结果就是:10 0 10
      

  3.   

    就你改写的 void another(V v ,int i)方法,会以"那么结果就是:10 0 10" 是正确的。
    因为你在 main方法里 用v = another(v,i); 接收了返回值嘛。