2013-10-09 44 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关键字表示该变量只有一个实例,并且每个实例只有一个变量。