看看按值传递和按引用传递

首先我想谈一下写博文的感受,我觉得博文不一定多么复杂,多么有深度,只要能对看的人有所帮助即可。我不赞同写关于一些框架的整合文章,比如struts2与spring整合之类的。当然要是开辟专栏系统得介绍框架的使用就另当别论了。因为在平时开发工作当中,经过几个项目的洗礼,对于框架的使用也就能掌握了。另外一点,在面试的时候,面试官也很少会问某个框架如何使用,一般都会问你这个框架比较深的东西。举个例子,面试官不会问你Spring声明式事务怎么配,会问你Spring利用什么技术实现的这点,会问你Spring是利用什么技术使得利用单例的dao就能实现线程安全。还有不能忽略对基础知识的学习,Spring声明式事务封装的再好,实现的再精妙,底层还是利用java中的基础知识,例如ThreadLocal。闲话说了这么多,可别喷我啊,咱们各抒己见。
本人上大学的时候,当时学习java的时候,老师是这样给我们讲按值传递和引用传递的。按值传递是将值本身的副本传递给函数参数,这个副本的改变不影响原先的值,按引用传递是讲引用传递给函数参数,对引用所指向的对象的改变将反应到原先的对象本身。现在想想讲的有点笼统,不是很清楚。
其实不管是按值传递和按引用传递,本质上说都是按值传递,只不过对于一些值类型(java中的一些基本类型,例如int,long等等)传递的是这个值的副本,改变的也是副本,函数返回的也是这个副本值,跟原来的那个值完全就是两码事了。例如下面的图

[img]http://dl2.iteye.com/upload/attachment/0085/2493/fe87820c-8c92-39f9-adec-c63c48b7f768.jpg[/img]
将i传给change函数,传的是i的值的副本,也就是另外一个5,生成的6,跟原来的i没有关系了。
按引用传的是什么呢,也是引用值的一个副本(所以我才说本质上说都是按值传递),只不过这个副本和原先的引用都指向的一个堆对象(继承于object),那么你最后生成的那个引用跟原先的引用有什么关系吗?有关系,就是他们都指向一个堆对象,所以对引用副本所指的对象的改变也会反应到原先的那个引用上面(有个特例,String类型)。例如下图,对User U这个引用的副本所指向的堆对象也会反应到原先的那个引用上。

[img]http://dl2.iteye.com/upload/attachment/0085/2495/5a5a8291-ca20-3d51-9272-5fdc49c1a36e.jpg[/img]
产生按值传递和按引用传递这两个术语的本质原因还是基本类型和对象的区别。传递的时候都是传的值的副本。只不过这个值到底是不是引用的区别。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值