前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 中是“值传递”还是“引用传递”?

Java 中是“值传递”还是“引用传递”?

作者头像
业余草
发布2019-10-25 09:30:23
7400
发布2019-10-25 09:30:23
举报
文章被收录于专栏:业余草业余草

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/xmt1139057136/article/details/94687673

最近,我在 stackoverflow 上,看到了一个有意思的题目。Java 中到底是“值传递”还是“引用传递”?

640?wx_fmt=png
640?wx_fmt=png

回答数很多,点赞数也很多。很快就吸引了我的注意力!

通过我个人对通篇文章的阅读,得出了 3 个普遍被大家误导的错误!

错误1:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。 错误2:Java 是引用传递。 错误3:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。

实际上,Java 中只有“值传递”!这并不是我一家之言,而是众多 stackoverflow 上众多网友的讨论的结果!

640?wx_fmt=png
640?wx_fmt=png

我选择了一个比较经典的答案,整理给大家!

640?wx_fmt=png
640?wx_fmt=png

最重要的一点理解是 Dog myDog,它实际上是指向“Dog”的指针。当我们调用 foo(myDog) 的时候,你实际上是将创建的对象的地址传递 Dog 给 foo 方法。

注意,Java 中的指针不是指地址。

现在假设 Dog 对象驻留在内存地址 是 42。这意味着我们将 42 传递给该方法。

参数 someDog 设置为值 42,在代码 “AAA” 处,someDog 跟随 Dog,它指向(Dog 地址 42 处的对象),要求Dog(地址为 42 的那个)将他的名字改为 Max。

在代码“BBB” 处,Dog 创建了一个新的。假设它所在地址是 74,我们将参数分配 someDog 给 74。

在代码“CCC” 处,someDog 跟随 Dog 它指向(Dog 地址 74 处的对象),要求 Dog(地址为 74 的那个)将他的名字改为 Rowlf。

然后,return 了。

Java 的工作方式与 C 完全相同。您可以分配指针,将指针传递给方法,按照方法中的指针操作并更改指向的数据。但是,您无法更改指针指向的位置。

Java 总是按值而不是通过引用传递参数。Java 把引用的地址当做值进行了传递,这么说,你应该就明白了!

上面我的解释,可能会遇到大家!时间关系,我推荐大家去阅读原文吧。

https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value

请手动打开这个地址,进行阅读。我个人是理解了,可能是我没解释好!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档