Java中到底是值传递还是引用传递
更新:HHH   时间:2023-1-7


今天就跟大家聊聊有关Java中到底是值传递还是引用传递,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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

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


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


错误1:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。 


错误2:Java 是引用传递。 


错误3:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。

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


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


最重要的一点理解是 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 把引用的地址当做值进行了传递,这么说,你应该就明白了!

看完上述内容,你们对Java中到底是值传递还是引用传递有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注天达云行业资讯频道,感谢大家的支持。

返回云计算教程...