public Foo createFoo(){
Foo foo = new Foo();
return foo;}
相对于。代码B:
Foo myFoo;createFoo(myFoo);public void createFoo(Foo foo){
Foo f = new Foo();
foo = f;}
这两个代码之间有什么区别吗?
明月笑刀无情
浏览 370回答 3
3回答
慕的地10843
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");
}}我将分步骤解释这一点:声明名为f类型Foo并将其分配给一个新的类型对象。Foo带有属性"f".Foo f = new Foo("f");从方法方面来说,是类型的引用。Foo有名字a被声明,并且它最初被分配给null.public static void changeReference(Foo a)正如您所称的方法changeReference,参考文献a将分配给作为参数传递的对象。changeReference(f);声明名为b类型Foo并将其分配给一个新的类型对象。Foo带有属性"b".Foo b = new Foo("b");a = b正在重新分配引用。a不f属性为"b".如你所言modifyReference(Foo c)方法,引用c被创建并分配给具有属性的对象。"f".c.setAttribute("c");将更改引用对象的属性。c指向它,与引用的对象相同f指着它。我希望您现在了解如何将对象作为参数传递到Java中:)