Java的引用传递和值传递

Java的引用传递和值传递

今天组长问我Java的值传递和引用传递分别是什么,写出个例子比较一下。刚开始想没什么难的,问度娘啊,不搜不要紧,一下子弄懵逼了。好多文章上来就说Java没有引用传递,只有值传递,坑爹啊,本来是明白的只是抄个代码而已,弄得自己都不知道怎么办了。搜了一下午,结合别人的思路自己总结了一下,关于Java的值传递和引用传递。

直接上代码(有点简单,大家将就看吧):
package com.passBy;

public class PassBy {


    //test1演示的是值传递
    public int test1(int num)
    {
        num = 10;
        return num;
    }


    //test2演示的是引用传递
    public void test2(Student stu)
    {
        stu.age = 20;

    }

    public static void main(String[] args) {


        PassBy passby = new PassBy();


        int value = 0;
        passby.test1(value);
        System.out.println("值传递:    " + passby.test1(value));



        //引用传递前先创建引用student
        Student student = new Student();
        passby.test2(student);
        System.out.println("引用传递:   " +student.age);
    }


}
package com.passBy;

public class Student {

    int age = 15;

}

test1是值传递的方法,大家都能看得懂。实际就是把value=10拷贝进方法test1中,拷贝这个词很重要,他只是把10这个值传进去,互不影响,拷贝的是值,与其他无关。

test2是引用传递,刚开始我没搞清引用是什么,弄得自己很难受。

举个例子:
Student student = new Student();
student就是引用
new Student()是对象

这时候你在看test2代码,你就豁然开朗,我擦这么回事,区别是这个样子。这时候咱们来点高深的,前面说到值传递,只是将值拷贝传递下去。引用不一样,引用指向的是一个内存地址,将它传递下去,你对他修改就会有影响,因为前后引用都指向一个内存地址。

网上关于Java是不是只有值传递,我是这么理解的,引用传递,传递的是一个内存地址。这个内存地址是一个值的形式传递的,传递的是一个值,所以Java只有值传递。我的看法是,没必要弄得那么死板,我觉得还是有点区别的,毕竟两种方式在内存方面分配是有些不同的,我们不能弄的太形而上学,那么较真,知识是不断进步的,有个发展的眼光也是不错的。

下面我们在谈一谈两种方式的使用,基本类型都是值传递,注意String类型虽然不是基本类型,但他的使用有些特别貌似也是值传递(我也是个菜鸟,没看太明白),其他的是引用传递。

对于引用分配我推荐一个博客,地址http://yqsshr.blog.51cto.com/469059/147695/
当中内存分配那段讲得很好,让我豁然开朗。

引用和对象我看的是百度经验,地址http://jingyan.baidu.com/article/a501d80cf734c3ec630f5e25.html

这是我的很烂的总结与归纳,有不妥之处请大神指教,我来起个抛砖引玉的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值