猿问

关于Java引用传递

Java引用传递

这两个代码之间有什么区别:

代码A:

Foo myFoo;myFoo = createfoo();

哪里

public Foo createFoo(){
   Foo foo = new Foo();
   return foo;}

相对于。代码B:

Foo myFoo;createFoo(myFoo);public void createFoo(Foo foo){
   Foo f = new Foo();
   foo = f;}

这两个代码之间有什么区别吗?



蛊毒传说
浏览 306回答 3
3回答

阿晨1998

Java总是按值传递参数,而不是通过引用传递参数。让我通过一个例:public class Main{      public static void main(String[] args)      {           Foo f = new Foo("f");           changeReference(f); // It won't change the reference!           modifyReference(f); // It will modify the object that the reference variable "f" refers to!      }      public static void changeReference(Foo a)      {           Foo b = new Foo("b");           a = b;      }      public static void modifyReference(Foo c)      {           c.setAttribute("c");      }}我将分步骤解释这一点:声明名为f类型Foo并将其分配给一个新的类型对象。Foo带有属性"f".Foo f = new Foo("f");从方法方面来说,是类型的引用。Foo有名字a被声明,并且它最初被分配给null.public static void changeReference(Foo a)正如您所称的方法changeReference,参考文献a将分配给作为参数传递的对象。changeReference(f);声明名为b类型Foo并将其分配给一个新的类型对象。Foo带有属性"b".Foo b = new Foo("b");a = b正在重新分配引用。a不f属性为"b".如你所言modifyReference(Foo c)方法,引用c被创建并分配给具有属性的对象。"f".c.setAttribute("c");将更改引用对象的属性。c指向它,与引用的对象相同f指着它。我希望您现在了解如何将对象作为参数传递到Java中:)

莫回无

因为Java严格地“按值传递”,甚至对象的引用也是通过值传递的,所以第二段代码将不能像预期的那样工作。请参阅“相关”一节。不计其数关于这个的讨论。

HUWWW

将方法参数视为自己的变量声明..如果要用单个代码块替换方法调用,则如下所示:Foo myFoo;{                      //Method call starts here     Foo foo;     foo = myFoo;     Foo f = new Foo();     foo = f;}                      //Method call ends here即使方法参数与另一个变量的名称相同,方法参数仍然是它自己的唯一引用,只有方法知道。这和Eng.Fouad上面说的一样。
随时随地看视频慕课网APP

相关分类

Java
我要回答