引用传递和引用调用有啥区别?

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?"中提供(剧透:否。)

【讨论】:

对象不是通过引用传递的吗? 技术上它们是按值传递的,但它们的值是一个引用。如果将 Object foo 传递给方法,然后说 '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

【讨论】:

以上是关于引用传递和引用调用有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

C 和 C++ 中的“通过引用传递”到底有啥区别?

值传递和引用传递(不是引用类型的传递)的区别

C#在方法调用中,参数按值传递与按引用传递的区别是啥?

在c语言编程中,传值方式和传引用方式之间有啥区别?

值传递和引用传递的区别

java基本数据类型传递与引用传递区别详解