值传递和引用传递

发布于 2022-09-02 10:49:30 字数 53 浏览 21 评论 0

为什么在java学习中要引入这个值传递和引用传递?也就是说这个值传递和引用传递的作用是什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自找没趣 2022-09-09 10:49:30

值传递应该是拷贝了一个副本,引用传递是将变量直接指向内存中的地址,这个地址中的值变了的话,所有指向它的变量值都变了。比如变量a的值是123456,在内存中的地址是0xxxx,将a引用传值给b,那么b也指向0xxxx,即使修改b的值,也就是修改了该地址中的值,a的值也会改变。但是直接赋值的话他们在内存中的地址就不同了,互不相干。

冷…雨湿花 2022-09-09 10:49:30

许多面向对象编程语言里,都会存在值传递或者引用传递概念。

值传递一般是基本类型的变量,引用传递一般是对象等复杂类型的变量。这两种变量的存储位置是不一样的。基类型存储于栈内存中,复杂类型存储于堆内存中。

出于性能的考虑,如果将一个基本类型的变量赋值给另外一个变量,只是单纯的内存复制。如果是复杂变量,会牵扯到许多东西,复制的效率比较低。所以只能引用传递,也就是地址传递。

说个比喻:如果你需要一块砖,我可以马上拿给你;如果说你需要一座山,我只能告诉你山在那边。

阳光的暖冬 2022-09-09 10:49:30

其实都是值传递, 所谓"引用传递"是说传递的值是一个引用.

引用传递的存在是因为OOP.
一个实例是数据和方法的组合, 往往映射到一个实体.
那么"按值传递"一个对象, 或者说"把数据memcpy一份来创建一个新对象"这个行为的语义可能是可疑的. 把一个Person实例这样复制一份对应现实中的什么呢? 新的Person涨工资了旧的Person应该怎样?

"复制出一个相等且独立的对象"这个需求当然也是存在的, 比如复制一个三角形. 不过这种事用拷贝构造函数就可以实现, 不必专门提供一个机制.

所以如果只实现一种"传递对象"的语义 (不像C++那么复杂), 传递对象的引用是比较不古怪的思路.

风吹短裙飘 2022-09-09 10:49:30

知足吧少年。到了C和C++里面就是让你操纵指针了。
我的意思是你可以参考一下C系语言里的指针。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文