到底传值还是传引用

      不少同学总是质疑java编程中参数的传递,到底是传值还是传引用?总是模棱两可,导致编程涉及到这方面时很苦恼,关于这个问题,我在这里记述一下我的理解,欢迎批评指正。

      首先锁定一个根本方向:java中只有传值!

      这里就有同学纳闷了,只有传值还要传引用这一说法干吗?为了便于理解,我们又可以这样说:

      在java中,简单数据类型是按值传递的,对象是按引用传递的。。。晕,这人怎么说话颠三倒四的,唐僧了。。。。哈哈,莫急,听我慢慢道来。。。。

      1. 所谓传值,压栈的是参数值的副本,是把实参的值赋值给形参,对形参的任何修改,都不会影响到实参的值;
      2. 而传引用(类似于C中的指针),压栈的是引用的副本,是以地址的方式传递参数,传递以后,形参和实参都指向同一个对象,只是他们名字可能不同而已,对形参的修改将影响实参的值。

      细心的看客应该意识到了,上边第2条中,引用的副本本身也是按值传递,所以,刚开始那种说法就通了——java中只有传值!

      看过介绍,再结合下述例子看看是不是就懂了?

package com.test;

class Value {
    int i = 10;
}

public class Test {

    public static void main(String[] args) {
        Test t = new Test();
        Value v = new Value();
        int i = 10;
        System.out.println("a v.i = " + v.i + ", i = " + i);
        t.test(v, i);
        System.out.println("c v.i = " + v.i + ", i = " + i);
    }

    private void test(Value v, int i) {
        v.i = 20;
        i = 20;
        System.out.println("b v.i = " + v.i + ", i = " + i);
    }
}

输出结果为:

a v.i = 10, i = 10
b v.i = 20, i = 20
c v.i = 20, i = 10

转载于:http://komes.javaeye.com/blog/405709

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值