integer是值传递还是引用传递_Java 中是“值传递”还是“引用传递”?

点击上方“业余草”,选择“置顶公众号”

第一时间获取技术干货和业界资讯!

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

0a5d5d90bad360fcf8439cfe49d22cd4.png

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

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

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

错误2:Java 是引用传递。 

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

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

99d6faf06afbe51b429cc763a3b6d402.png

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

6cf0b1e719f6459d5f4e5647572323a3.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

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


最后,请允许我发个小活动!

上周推荐的《Elasticsearch 核心技术与实战》,口碑很不错,上线 1 周,就近 9000 订阅了。早鸟价 ¥99,通过我的海报买,再返 ¥24,到手价 ¥75, 【明晚 24 点恢复原价 ¥129】,需要的朋友别错过。

ca3e05972af71fd46d5223fb4467f6f4.png

需要上车,参与返现的,请加我微信:xttblog。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值