簡體   English   中英

關於Java中靜態變量行為的說明

[英]Clarification regarding static variable behaviour in Java

假設我有一堂課:

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

在另一堂課中,我這樣做:

Class Dummy2{

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

     }

}

現在假設在Dummy2我向temp添加了元素。 更改會反映在Dummy.varArray嗎? 因為這就是我的程序中正在發生的事情。 我嘗試打印兩個的地址,它們都指向相同的地址。 不知道static場是這樣工作的。 還是我做錯了什么?

它不是關於靜態的。 語句ArrayList<String> temp = Dummy.varArray; 表示兩個變量都引用相同的arraylist。 由於varArray是靜態的,因此它將只有一個副本。

您可以閱讀ArrayList<String> temp = Dummy.varArray; as, 變量temp現在引用由Dummy.varArray引用的ArrayList對象。

順便說一下,您需要使用public static ArrayList<String> varArray = new ArrayList<String>();初始化它public static ArrayList<String> varArray = new ArrayList<String>(); 在對其執行任何操作之前。

ArrayList<String> temp = Dummy.varArray; 將采用所謂的參考副本 (或淺表副本 )。 也就是說,它們將指向同一對象。

它不需要深層副本。 請參閱如何克隆ArrayList以及克隆其內容?

是的,它的行為正確。

當你這樣做

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)時, 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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM