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");
}
}
我将分步骤解释这一点:
-
声明名为 type 的引用,并将其分配给具有属性 的新类型对象。f
Foo
Foo
"f"
Foo f = new Foo("f");
-
从方法端,声明具有名称类型的引用,并将其最初分配给 。Foo
a
null
public static void changeReference(Foo a)
-
当您调用该方法时,引用将被分配给作为参数传递的对象。changeReference
a
changeReference(f);
-
声明名为 type 的引用,并将其分配给具有属性 的新类型对象。b
Foo
Foo
"b"
Foo b = new Foo("b");
-
a = b
将引用 NOT 重新分配给其属性为 的对象。a
f
"b"
-
调用方法时,将创建一个引用并将其分配给具有属性 的对象。modifyReference(Foo c)
c
"f"
-
c.setAttribute("c");
将更改引用指向它的对象的属性,并且该对象与引用指向它的对象相同。c
f
我希望您现在了解将对象作为参数传递在Java中的工作原理:)