引用传递和引用调用有啥区别?
Posted
技术标签:
【中文标题】引用传递和引用调用有啥区别?【英文标题】:what is the difference between pass by reference and call by reference?引用传递和引用调用有什么区别? 【发布时间】:2011-04-09 06:42:06 【问题描述】:java中的引用传递和引用调用有什么区别?
【问题讨论】:
“Pass”和“Call”是不同的东西,而不是同一事物的不同版本。您是指“按引用传递”和“按值传递”吗? @Jim Garrison - 显然“引用调用”是引用传递的同义词,或者说 Wikipedia。 @Richard - 如果你回答这个问题,我会投赞成票。 @StriplingWarrior - 哈哈哈这甚至连我都没有想到 :P 不过我会投赞成票(不过还是谢谢 :D) Is Java pass by reference?的可能重复 【参考方案1】:Java 不通过引用传递任何变量。
在 Java 中考虑通过引用传递对象是很有诱惑力的——但这是有害的。对象类型的变量是引用。传递时,按值传递。
在其他语言中,pass-by-reference 和 call-by-reference 是一回事。
编辑:更多细节在现有的***问题"Is Java pass by reference?"中提供(剧透:否。)
【讨论】:
对象不是通过引用传递的吗? 技术上它们是按值传递的,但它们的值是一个引用。如果将 Objectfoo
传递给方法,然后说 'foo = new Object()',则传递给方法的调用方法的变量将保持不变。
在java中,一切都是按值传递的。按值传递。按值传递。准确地说,java 引用是按值传递的。这意味着如果您有一个对象 a 的引用,并且您将该引用传递给方法调用,则引用 a 将被复制到 b 中。现在 b 和 a 指向同一个对象。
不,“对象”变量是包含对对象的引用的变量。当这样的变量作为参数传递时,它是按值传递的。在这种情况下,该值是一个参考。这与实际通过引用传递对象有很大不同,因为例如,如果您重新分配参数以指向不同的对象,则对传递的对象没有影响。如果对象实际上是通过引用传递的,那就不是真的了。
@Jagan:没有传递引用的副本是按值传递的。这是一个副本!【参考方案2】:
重要概念 - Java 没有“通过引用传递”的概念。 Java 中的所有内容都是按值传递的。当您在方法调用中将对象引用传递给参数时,您实际上是在传递一个指向对象引用的值。
以下网址更详细地解释了这一点: http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 和 http://javadude.com/articles/passbyvalue.htm?repost
显然(如您的问题的 cmets 中所述)“通过引用传递”和“通过引用调用”这两个术语的含义相同。
【讨论】:
【参考方案3】:你问了,但是“通过引用传递”和“通过引用调用”是一回事。
如果您正在寻找按引用传递和按值传递之间的区别,请检查答案
Pass by reference or pass by value?
但请记住,Java 是按值传递参数的。
http://javadude.com/articles/passbyvalue.htm
http://academic.regis.edu/dbahr/GeneralPages/IntroToProgramming/JavaPassByValue.htm
【讨论】:
以上是关于引用传递和引用调用有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章