Java通过引用

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

代码A:

Foo myFoo;
myFoo = createfoo();

哪里

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

Vs.代码B:

Foo myFoo;
createFoo(myFoo);

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

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

Java总是通过值NOT通过引用传递参数。

让我通过一个example解释这一点:

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");

>从方法侧,声明具有名称a的类型Foo的引用,并且最初将其分配为null。

public static void changeReference(Foo a)

>当你调用方法changeReference时,引用a将被分配给作为参数传递的对象。

changeReference(f);

>声明名为b的类型为Foo的引用并将其分配给具有属性“b”的类型为Foo的新对象。

Foo b = new Foo("b");

> a = b将引用NOT f重新分配给其属性为“b”的对象。

>在调用modifyReference(Foo c)方法时,将创建引用c并将其分配给具有属性“f”的对象。

> c.setAttribute(“c”);将更改引用c指向它的对象的属性,它是引用f指向它的同一对象。

我希望你现在了解如何传递对象作为参数在Java工作:)

相关文章
相关标签/搜索