这两个代码有什么区别:
代码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; }
这两个代码之间有什么区别吗?
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"); } }
我将逐步解释这一点:
Foo f = new Foo("f");
public static void changeReference(Foo a)
changeReference(f);
Foo b = new Foo("b");
a = b正在将引用aNOT 分配给f属性为的对象"b"。
a = b
"b"
在调用modifyReference(Foo c)method时,将c创建一个引用并将其分配给具有attribute的对象”f”。
modifyReference(Foo c)method
c.setAttribute("c");将更改引用所c指向的对象的属性,并且引用所指向的对象是同一对象f。
c.setAttribute("c");
我希望你现在了解如何将对象作为参数传递给Java :)