Java:传值传引用的问题

11 篇文章 0 订阅

看javascript的时候突然想到了这样的问题,以前一直含含糊糊的。
感觉用的时候java每次都能猜对我的想法。。。。该传值的时候就传值该引用的时候就引用
但是这明显是不行的。。。于是上网找的了这样一篇文章,很清晰。看了就彻底明白了。。。
http://soft.chinabyte.com/database/310/12066310.shtml

2011-05-01 00:00中国IT实验室佚名
一直被这个参数到底是值传递还是引用传递的问题纠结 今晚特意好好想了想,总结如下:
  值传递:传递的就是实际的内存当中存储的 实在的值
  例如:int a=3; a 就指向了内存当中某一个物理地址里面存储的3
  当把a传递给另外一个变量,不管是局部变量还是 全局变量,都是值传递,即把a指向的物理内存中的这个3 传递给了另外一个变量,例如int b=a; 这句话之后就把3传递给了b,可能b在内存中又开辟了一个物理地址空间,但是存储的依然是3。之后就任凭b随便改变里面的值,瞎折腾都可以,但是a指向的那个内存单元中的3不会变的。
  例如 int a=3;
  int b=a;
  b++;
  system.out.println(a);//依然是3
  system.out.println(b);//b变为4
  这个跟参数传递一样的,例如
  int a=3;
  public void test(int a){
  	a=4;
  ]
  test(a);//这里把a传递给这个函数的时候,就相当于把a传递给上面的b一样,是把值=3传递给了形参a,所以任凭形参a=4 但是原来的a依然不变是3;因为两个a在内存当中的地址不一样,所以互相不影响。
  下面讨论引用传递:
  int a={1,2,3};
  System.out.println(a[1]);//为2
  int b[]=a;
  b[0]=4;
  b[1]=5;
  b[2]=6;
  System.out.println(a[1]); //为5
  很奇怪吧,这里详细解释一下。因为对象在内存当中存的是通过引用访问的,在内存中a指向的是一个地址的引用,比如a在内存中存的是一个地址00001,而00001地址里面存的才是真正的对象的实际内容,这时候把a传递给b,就是把这个引用地址给了b,让b也指向了00001,这时候b修改了00001内存地址当中的值的时候,就修改了实际的对象值,所以回过头来a再去指向这个00001内存地址的时候里面的值自然也就被修改了。
  一句话:当是基础类型传递时候用的是值传递,对象等复合类型传递的时候是引用的传递。
  引用传递形象点解释就是我把我们家的门牌号告诉你了,然后你来我家捣乱了,我回家之后家里的东西自然就乱了。而值传递形象点解释就是我把我们家的设计图纸给你了,你在我们家附近盖了跟我一样的房子,然后你随便瞎折腾,跟我们家无关。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值