值传递和引用传递.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
值传递和引用传递

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。 引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。 Java:按值传递还是按引用传递详细解说 前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了,下面是我在网上看到的一个帖子,解释的感觉挺全面,就转过来,以供以后学习参考: ? ? ? ? 1:按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递。示例如下: [java]?view plain?copy public?class?TempTest?{?? private?void?test1(int?a){?? //做点事情?? }?? public?static?void?main(String[]?args)?{?? TempTest?t?=?new?TempTest();?? int?a?=?3;?? t.test1(a);//这里传递的参数a就是按值传递?? }?? }?? 按值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了。 示例如下: [java]?view plain?copy public?class?TempTest?{?? private?void?test1(int?a){?? a?=?5;?? System.out.println(test1方法中的a=+a);?? }?? public?static?void?main(String[]?args)?{?? TempTest?t?=?new?TempTest();?? int?a?=?3;?? t.test1(a);//传递后,test1方法对变量值的改变不影响这里的a?? System.out.println(”main方法中的a=”+a);?? }?? }?? 运行结果是: [java]?view plain?copy test1方法中的a=5?? main方法中的a=3?? 2:按引用传递是什么 指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。 示例如下: [java]?view plain?copy public?class?TempTest?{?? private?void?test1(A?a){?? }?? public?static?void?main(String[]?args)?{?? TempTest?t?=?new?TempTest();?? A?a?=?new?A();?? t.test1(a);?//这里传递的参数a就是按引用传递?? }?? }?? class?A{?? public?int?age?=?0;?? }?? 3:按引用传递的重要特点 传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。 示例如下: [java]?view plain?copy public?class?TempTest?{?? private?void?test1(A?a){?? a.age?=?20;?? System.out.println(test1方法中的age=+a.age);?//?20 }?? public?static?void?main(String[]?args)?{?? TempTest?t?=?new?TempTest();?? A?a?=?new?A();??//age=0 a.age?=?10;?? t.test1(a);?? System.out.println(”main方法中的age=”+a.age);?? }?? }?? class?A{?? public?int?age?=?0;?? }?? 运行结果如下: [java]?view plain?copy test1方法中的age=20?? main方法中的age=20?? 4:理解按引用传递的过程——内存分配示意图

您可能关注的文档

文档评论(0)

jiupshaieuk12 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档