如果我有一门像下面这样的类(class):
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
吗? ?
最佳答案
在这两种情况下,fooObject.randomObject 都会将 NumberVariable 更改为 23。它们几乎是等效的,只是前者使用了额外的引用。
这不会使 Java 进行引用传递。 Java是按值传递的。每当您将某些内容作为参数传递给方法时,即使您传递的是对象的引用,它也会被复制。
虽然您可以使用复制的引用来访问和改变其末尾的对象,就像您在这里所做的那样,但对该引用的任何重新分配都无法逃脱该方法。
在你的第一个例子中:
ro = new RandomObject();
不会改变 fooObject.randomObject 的任何内容。
关于Java - 通过 "Reference Value"?检索值还是引用值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11909458/