Java传值问题

来源:互联网 发布:域名是啥意思 编辑:程序博客网 时间:2024/06/13 23:04

以前一直以为,传递基本类型的参数的形式是传值,传递引用类型的参数的形式是传引用。
如下:

public class TestRefParam {     private static void swap(int x, int y){        int temp = x;        x = y;        y = x;    }    public static void main(String[] args) {        int x =5; int y = 3;        System.out.println("x="+x+","+"y="+y);        swap(x, y);        System.out.println("x="+x+","+"y="+y);    }   }

运行结果:
x=5,y=3
x=5,y=3

这是我以前一直理解的。但以下代码片段我以为的结果是

姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]

===================
姓名:关羽,年龄:23]
姓名:诸葛亮,年龄:12]

public class TestRefParam {    private static void swap(Student stu1, Student stu2){        if(stu2 != null){            //交换            Student t = new Student();            t = stu1;            stu1 = stu2;            stu2 = t;        }    }    public static void main(String[] args) {        Student stu1 = new Student("诸葛亮",12);        Student stu2 = new Student("关羽",23);        System.out.println(stu1);        System.out.println(stu2);        System.out.println("===================");        swap(stu1, stu2);        System.out.println(stu1);        System.out.println(stu2);    }   }

但实际上得出的结果是:
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]

===================
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]

原因如下:java中并没有所谓的传引用,在传递引用参数时,传的是把引用的副本,因此当你在被调函数中对接收的引用副本做修改,并不会影响调用函数中的参数。但如果在被调函数中,修改引用的某个属性的值,就能起作用,为什么?
我们可以这么认为,调用函数传递一张纸条(这张纸条上写着我家地址的门牌号)给被调函数,如果你修改我给你的纸条,那我该住哪,还是住哪,并不会因为你修改了我给你的纸条就搬家了;但是如果你拿着我的纸条,找到了我家,然后把我家里面的黑白电视,换成液晶电视,那么,我家里的电视的的确确被你换了。

如下代码:

public class TestRefParam {    private static void swap(Student stu1, Student stu2){        if(stu2 != null){            stu2.name = "喜羊羊";        }    }    public static void main(String[] args) {        Student stu1 = new Student("诸葛亮",12);        Student stu2 = new Student("关羽",23);        System.out.println(stu1);        System.out.println(stu2);        System.out.println("===================");        swap(stu1, stu2);        System.out.println(stu1);        System.out.println(stu2);    }   }

控制台输出:
姓名:诸葛亮,年龄:12]
姓名:关羽,年龄:23]

===================
姓名:诸葛亮,年龄:12]
姓名:喜羊羊,年龄:23]

0 0
原创粉丝点击