Java是值传递还是引用传递-总结

小说:掌赚宝是骗局吗作者:帝董更新时间:2018-11-14字数:41487

睡觉不去寝室,在办公室睡是闹哪样,真是日了狗了,丁宁强作镇定道:“不好意思,我就想用用这里的钢琴。还以为没人,就自己进来了。”

赚钱提现软件贴吧

周泌翻身下马,牵着马走进了宅中,虽然房子的质量不错,但宅内却空空荡荡,看不到一丝绿色,马被仆人牵走了,他们被领进内宅,来到一座小院子里,只见院子的台阶上站着一人,此人年约三十余岁,长得很瘦,留着传统的翘胡子,他穿着白色的丝织长袍,质地考究,这在吐火罗只有上等人才能穿得起。
然而,若是能够摧毁天浮桥,那就会完全不同。月夜见尊占去大荒境,风魂打下天浮桥,局势将会再以某种微妙的方式平衡起来,然而其中的意义却大不相同。大荒境在仙界中拥有特殊的重要地位,但这种地位在很大程度上只是一种象征,自从木公离去后,大荒境其实早已荒芜了三百多年。

原来刚才的声响只是在引诱叶扬上钩,其实真正的杀招却是隐藏在了后面。眼看那三棱刺就要刺在叶扬的后背上,叶扬的腰部竟然如同拧麻花一般拧了起来,将那三棱刺的攻击给躲开了,但是他的肩膀依旧被这三棱刺划掉一层皮。

这个话题一直是Java程序员的一个热议话题,争论不断,但是不论是你百度搜也好还是去看官方的文档中所标明的也好,得到的都只有一个结论:Java只有值传递

 

在这里就不贴代码细致解释了,让我们来看看一些论据:

1.

“Java总是值传递的。不幸的是,他们(sun)决定称 "一个对象的地址" 为 "引用"。当我们传递一个对象的值的时候,我们传递的是他的引用。这会迷惑初学者。”

 

2.

“问题的关键是,"引用"这个词在表达"通过引用传递"时有着与我们通常在Java中的"引用"一词完全不同的意思。

在Java中"引用"通常意味着"对一个对象的引用"。但在编程语言理论中技术术语"引用/值传递"是说的"一个存储着变量的存储单元的引用",这是完全不同的。”

 

3.

摘自Ken Arnold和James Gosling的(前者不太熟后者我知道是Java之父)《Java程序设计语言 第二版(ps:虽然现在都出第四版了)》:

“有些人会错误的说:Java中的对象都是"引用传递"。"引用传递"这个术语正确的意思是当一个参数传递给一个函数的时候,调用函数获得一个原始值的引用,而不是他的值的一个拷贝(鄙人愚见:这里所说的对原始值的引用即是我们常说的"传递的对象的一个拷贝")。如果这个函数修改了它的参数,在调用代码中的值也会被改变,因为参数与参数都是用的相同的内存槽。很确定的,Java只有一种传值方式 - 这有助于保持事情的简单性。”

 

4.

“对于那些需要更多的(证据)来被信服的:你不能用Java直接写一个交换函数去交换两个作为参数传递的值,不论他们是对象还是单纯的值。至今交换函数对于那些允许引用传递的语言来说都是微不足道的。

因此Java是值传递的,包括指向一个方法的对象的指针。就这么简单。

真正的问题在于Java喜欢称自己没有指针;这是它作为一个安全的语言出名的一部分。因此尽管它实际上有指针(比C++更安全),它必须称之为"指针"以外的东西。Sun选择称之为"引用",尽管它不是业余的企业在区分"指针"和"引用"时通常所以为的意思。Java"引用"不像C++"引用"。Java有指向对象的指针,它的值会被传递给方法。”

 

=============================== 分割线 ===============================

 

总结:Java总是值传递的”。我们所以为的按引用传递,其实传递的还是引用中地址的值(并且是它的一个拷贝),也可以理解为指针的值。让我们所疑惑的,只是“引用”这个词的含义,在Java中的引用和我们广以为的引用是有所不同的。

 

ps:若对本文哪里有不同见解或有所疑惑,可以指出来,一同探讨,若有错误之处还请多多见谅,提出来好做修正,感谢。

 

参考资料:

1.Stack Overflow:Is Java “pass-by-reference” or “pass-by-value”?

2.Wiki: Java Passes By Value

3.知乎上也有个挺清晰的分析:Java 到底是值传递还是引用传递?

 

编辑:安杜邓徒

发布:2018-11-14 00:40:49

当前文章:http://www.leetaemin.cn/08-15/90704.html

网上最火的歌曲 张家辉3000万 新手站长论坛 百度金矿官网 滴滴网约车车型 薇薇卡卡博客 日入100 在家网上兼职招聘

42443 37682 80170 77201 47625 7561338966 87769 87184

我要说两句: (0人参与)

发布