Java - 通过“参考值”?检索参考值或值?

时间:2012-08-10 21:23:21

标签: java

如果我有类似下面的课程:

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);
    }
}

fooObjectrandomObject NumberVariable更改为23?

如果不是,我只需要在Foo中使用名为SetRandomObject的方法,然后传入ro?这是否可以替代Java中的引用传递?

如果我这样做会怎么样:

public class Goo()
{
    private Foo fooObject = new Foo();

    public Goo()
    {
        fooObject.GetRandomObject().ChangeNumberVarialbe(23);
    }
}

是否仍然没有更改NumberVariable

1 个答案:

答案 0 :(得分:2)

在这两种情况下,fooObject.randomObject都会将NumberVariable更改为23.它们几乎等同于前者使用额外的引用。

这不会使Java传递引用。 Java是按值传递的。无论何时将某些方法作为参数传递给方法,它都会被复制,即使您传递的是对象的引用。

虽然您可以使用该复制的引用来访问和更改其末尾的对象,但正如您在此处所做的那样,对该引用的任何重新分配都无法转义该方法。

在你的第一个例子中:

ro = new RandomObject();

不会改变有关fooObject.randomObject的任何内容。