日期:2014-05-20  浏览次数:20668 次

java的基础知识求教

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

------解决方案--------------------
这是参数传递的问题啊,只要记住一个"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的值。
------解决方案--------------------
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;