如果我有类似下面的课程:
public class Foo()
{
private RandomObject randomObject = new RandomObject();
public RandomObject GetRandromObject()
{
return randomObject;
}
}
在另一堂课中,我这样做:
public class Goo()
{
private Foo fooObject = new Foo();
public Goo()
{
RandomObject ro = fooObject.GetRandomObject();
ro.ChangeNumberVariable(23);
}
}
fooObject
将randomObject
NumberVariable
更改为23?
如果不是,我只需要在Foo
中使用名为SetRandomObject
的方法,然后传入ro
?这是否可以替代Java中的引用传递?
如果我这样做会怎么样:
public class Goo()
{
private Foo fooObject = new Foo();
public Goo()
{
fooObject.GetRandomObject().ChangeNumberVarialbe(23);
}
}
是否仍然没有更改NumberVariable
?
答案 0 :(得分:2)
在这两种情况下,fooObject.randomObject都会将NumberVariable更改为23.它们几乎等同于前者使用额外的引用。
这不会使Java传递引用。 Java是按值传递的。无论何时将某些方法作为参数传递给方法,它都会被复制,即使您传递的是对象的引用。
虽然您可以使用该复制的引用来访问和更改其末尾的对象,但正如您在此处所做的那样,对该引用的任何重新分配都无法转义该方法。
在你的第一个例子中:
ro = new RandomObject();
不会改变有关fooObject.randomObject的任何内容。