Java 总是按值传递参数,而不是按引用传递参数。在您的示例中,您仍在传递其值,而不是引用本身。在方法中,您将另一个(本地)引用 分配给将其作为参数传递的同一对象。修改该引用后,将修改作为参数传递的原始引用 。obj
changeName
obj
obj
编辑:
让我通过一个例子来解释这一点:
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 change the object that the reference refers to!
}
public static void changeReference(Foo a)
{
Foo b = new Foo("b");
a = b;
}
public static void modifyReference(Foo c)
{
c.setAttribute("c");
}
}
我将分步骤解释这一点:
1-声明名为类型的引用,并将其分配给具有属性的新类型对象。f
Foo
Foo
"f"
Foo f = new Foo("f");
2-从方法端,声明具有名称类型的引用,并将其最初分配给 。Foo
a
null
public static void changeReference(Foo a)
3-当您调用该方法时,引用将被分配给作为参数传递的对象。changeReference
a
changeReference(f);
4-声明名为类型的引用,并将其分配给具有属性的新类型对象。b
Foo
Foo
"b"
Foo b = new Foo("b");
5- 将引用 NOT 重新分配给其属性为 的对象。a = b
a
f
"b"
6- 调用方法时,将创建一个引用并将其分配给具有属性 的对象。modifyReference(Foo c)
c
"f"
7-将更改引用指向它的对象的属性,并且它是引用指向它的同一对象。c.setAttribute("c");
c
f
我希望您现在了解将对象作为参数传递在Java中的工作原理:)