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- 在方法方面,声明了一个名为 a 的类型为 Foo 的引用,并且它最初分配给 null。
public static void changeReference(Foo a)
3- 当您调用方法changeReference 时,引用a 将被分配给作为参数传递的对象。
changeReference(f);
4- 声明一个名为 b 类型为 Foo 的引用,并将其分配给一个类型为 Foo 的新对象,其属性为 "b"。
Foo b = new Foo("b");
5- a = b 正在将引用 a NOT f 重新分配给其属性为 "b" 的对象。
6- 当您调用modifyReference(Foo c) 方法时,会创建一个引用c 并将其分配给具有"f" 属性的对象。
7-c.setAttribute("c");会改变引用c指向它的对象的属性,引用f指向它的是同一个对象。
我希望您现在了解在 Java 中如何将对象作为参数传递:)