0

如果我有一个像下面这样的课程:

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 NumberVariable23吗?

如果不是,我是否只需要Foo调用一个方法SetRandomObject并传入ro?这会是 Java 中通过引用传递的一个很好的替代品吗?

如果我这样做怎么办:

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

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

它仍然没有改变NumberVariable吗?

4

1 回答 1

2

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

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

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

在您的第一个示例中:

ro = new RandomObject();

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

于 2012-08-10T21:32:03.500 回答