2013-02-08 113 views
2

我有这样的事情:分配实例变量静态变量

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的财产是否也会间接改变?

+1

您不会将变量*赋值给变量,而是将变量的对象引用赋值给变量。这是一个很大的区别,理解这将帮助你理解你的程序的行为和Rohit Jain的建议。 – 2013-02-08 17:35:50

回答

6

如果我更改o4This的属性,该怎么办? o4All的财产也将 间接更改吗?

,它会被改变。因为现在,o4Allo4This都指的是相同的实例。您可以通过下面的赋值这样做: -

Test.o4All = this.o4This; 

在上面的任务,你没有被o4This创建提到的实例的副本,而是你只是复制在o4All参考o4This值。现在,因为o4This的值是一些参考instance。因此,o4All现在引用与o4This相同的实例。因此,您使用参考对instance所做的任何更改也会反映在其他参考中。