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

は23fooObjectrandomObject NumberVariable変更されますか?

そうでない場合は、メソッドを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 に答える