Java中的参数传递到底是引用还是值传递?

看了很多中文文章讨论这个问题,结果都感觉是臆测的,没什么根据。再看一些英文文章,一致表示:Java中所有的参数传递都是“值传递”。引用其中两篇如下:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

http://www.yoda.arachsys.com/java/passing.html

正如第二篇文章指出的那样,传说是:

对象通过引用传递,原始类型通过值传递。真是这样吗?

事实是:

1、Java中所有东东都是通过值传递。而对象,压根就不会被传递。

2、变量的值要么是原始类型,要么就是引用,而不是对象本身。

看起来有点费解。实际上是,方法参数传递过去的是一个原来对象引用的copy,这一点可以从第一篇文章的图看出来。如果你在方法中改变内容,因为这个copy也是指向那个对象,所以改动会生效。但是如果你对这个对象的引用进行操作,例如argObject = new SomeObject();这样的操作是无效的,因为你改变的是copy,原来的引用还是指向原来的Object。就这么简单。

 

补充一句:实际上.NET中的引用传递方式是一样的,也只是传递了一个引用的Copy过去。所以上述第一篇文章的例子在.NET下会得到同样的结果。详情可以去看看之前的堆栈系列文章第二篇的结尾部分。 : )

posted @   痘痘熊  阅读(2246)  评论(5编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示