3

私はこのようなものを持っています:

public class Test {

    public static MyObject o4All = null;

    public MyObject o4This = null;

    public void initialize() {

        // create an instance of MyObject by constructor
        this.o4This = new MyObject(/* ... */);

        // this works, but I am wondering
        // how o4All is internally created (call by value/reference?)
        Test.o4All = this.o4This;

    }
}

私は、静的メソッドによってのみ静的変数を割り当てたり変更したりする必要があることを知っています。しかし、java-docs ( http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html ) によると、オブジェクト参照を使用できます。

クラス メソッドは、インスタンス変数またはインスタンス メソッドに直接アクセスできません。オブジェクト参照を使用する必要があります。

o4This のプロパティを変更するとどうなりますか? o4All のプロパティも間接的に変更されますか?

4

1 に答える 1

7

o4This のプロパティを変更するとどうなりますか? o4All のプロパティも間接的に変更されますか?

はい、変更されます。現在、 と の両方が同じインスタンスを参照しているためo4Allですo4This。あなたは次の割り当てでこれを行いました: -

Test.o4All = this.o4This;

上記の割り当てでは、 によって参照されるインスタンスのコピーを作成するのではなく、参照内のo4Thisの値をコピーするだけです。ここで、value は some への参照であるためです。したがって、のインスタンスと同じインスタンスを参照するようになりました。したがって、参照の使用に加えた変更は、他の参照にも反映されます。o4Thiso4Allo4Thisinstanceo4Allo4Thisinstance

于 2013-02-08T17:34:15.030 に答える