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 的属性也会间接改变吗?

的,它会改变。因为现在,o4Allo4This都指的是同一个实例。您通过以下作业做到了这一点:-

Test.o4All = this.o4This;

在上面的分配中,您没有创建由 引用的实例的副本o4This,而是在复制引用o4This中的值o4All。现在,因为o4Thisvalue 是对 some 的引用instance。所以,o4All现在引用与 相同的实例o4This。因此,您对instance使用引用所做的任何更改也将反映在另一个引用中。

于 2013-02-08T17:34:15.030 回答