2013-10-09 46 views
0
靜態變量的行爲澄清

假設我有一個類:關於Java的

class Dummy{ 
public static ArrayList<String> varArray; 
} 

在另一類我這樣做:

Class Dummy2{ 

    void main() 
    { 
     ArrayList<String> temp = Dummy.varArray; 

    } 

} 

現在假設在Dummy2我添加元素temp。這些更改是否會反映在Dummy.varArray?因爲這是我的程序中發生的事情。我嘗試打印這兩個地址,他們都指向相同的地址。不知道static字段這樣工作。或者我做錯了什麼?

回答

5

它不是靜態的。聲明ArrayList<String> temp = Dummy.varArray;表示這兩個變量都指向相同的數組列表。由於varArray是靜態的,它將只有一個副本。

您可以閱讀ArrayList<String> temp = Dummy.varArray;爲,的變量temp現在參照正由Dummy.varArray

簡稱順便說ArrayList對象,你需要初始化使用public static ArrayList<String> varArray = new ArrayList<String>();你執行任何操作之前,在上面。

+0

如果'varArray'不是靜態的,這是真的嗎? – Aneesh

+0

@Aneesh。如果您只將一個引用分配給另一個引用,則無論其靜態還是非靜態都無關緊要。他們會引用同一個對象。您可以閱讀sureshatta的答案以獲得更多解釋。 –

+0

感謝您的幫助..! – Aneesh

2

是的,它表現正確。

當你做到這一點

ArrayList<String> temp = Dummy.varArray; 

都指向同一個參考,因爲temp不是new列表,你只是告訴引用Dummy.varArray

爲了讓他們獨立,建立一個新的列表

ArrayList<String> temp = new ArrayList<String>(); //new List 
temp.addAll(Dummy.varArray); //get those value to my list 

注意事項:

當你這樣做的時候temp.addAll(Dummy.varArray)他們在varArray中添加了temp

ArrayList<String> temp = new ArrayList<String>(); //new List 
temp.addAll(Dummy.varArray); //get those value to my list 
Dummy.varArray.add("newItem");// "newitem" is not there in temp 

後面添加的元素不會奇蹟般地添加到temp

0

static關鍵字表示該變量只有一個實例,並且每個實例只有一個變量。