2013-02-08 259 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所做的任何更改也會反映在其他參考中。