del*_*ita 30 java terminology parameter-passing pass-by-reference pass-by-value
这2个代码有什么区别:
代码A:
Foo myFoo;
myFoo = createfoo();
Run Code Online (Sandbox Code Playgroud)
哪里
public Foo createFoo()
{
Foo foo = new Foo();
return foo;
}
Run Code Online (Sandbox Code Playgroud)
比.代码B:
Foo myFoo;
createFoo(myFoo);
public void createFoo(Foo foo)
{
Foo f = new Foo();
foo = f;
}
Run Code Online (Sandbox Code Playgroud)
这2个代码之间有什么区别吗?
Eng*_*uad 187
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");
}
}
Run Code Online (Sandbox Code Playgroud)
我将逐步解释这个:
声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的新对象类型"f".
Foo f = new Foo("f");
Run Code Online (Sandbox Code Playgroud)

从方法方面,声明Foo了具有名称的类型的引用,a并且它最初被分配给null.
public static void changeReference(Foo a)
Run Code Online (Sandbox Code Playgroud)

在调用方法时changeReference,引用a将分配给作为参数传递的对象.
changeReference(f);
Run Code Online (Sandbox Code Playgroud)

声明一个名为btype 的引用,Foo并将其分配给Foo具有属性的新对象类型"b".
Foo b = new Foo("b");
Run Code Online (Sandbox Code Playgroud)

a = b将引用aNOT 重新分配给f其属性所在的对象"b".

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

c.setAttribute("c");将更改引用c指向它的对象的属性,并且它与引用f指向它的对象相同.

我希望你现在明白如何将对象作为参数传递在Java中:)