快速业务通道

我对java到底传值还是传引用的理解 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

我对java到底传值还是传引用的理解

时间:2011-10-13 javaeye Komes

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

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

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

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

1. 所谓传值,压栈的是参数值的副本,是把实参的值赋值给形参,对形参的任何修改,都不会影响到 实参的值;

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

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

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

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://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号