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

Java函数传引用,有问题
Java函数传递,不是除了基本类型以外就是引用吗,这里的引用更像C++里的指针 为什么会有下面这个情况?
Java code

public class Demo5{
    public static void swap(P a,P b){//交换指向
        P tmp=null;
        tmp=a;
        a=b;
        b=tmp;
    }
    public static void fun(P a){//改变var
        a.var=100;
    }
    public static void main(String[] args){
        P a=new P(1);
        P b=new P(2);
        System.out.println("a="+a.var);
        System.out.println("b="+b.var);
        swap(a,b);
        System.out.println("a="+a.var);
        System.out.println("b="+b.var);
                //为什么这里没有交换?
        fun(a);
        System.out.println("a="+a.var);
                //这里的值却改变了?
    }
}
class P{
    public int var;
    public P(int var){
        this.var=var;
    }
}



------解决方案--------------------
老生长谈的问题了

swap方法,是交换的该方法下的两个同名局部变量a,b。并没有交换到main方法传递过来的a,b

你把swap方法的两个a,b换成c,d。把名字改一下就清晰点了。