Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Java中静态变量行为的澄清_Java - Fatal编程技术网

关于Java中静态变量行为的澄清

关于Java中静态变量行为的澄清,java,Java,假设我有一门课: class Dummy{ public static ArrayList<String> varArray; } 类虚拟{ 公共静态数组列表varArray; } 在另一节课上,我这样做: Class Dummy2{ void main() { ArrayList<String> temp = Dummy.varArray; } } 类Dummy2{ void main() { ArrayList

假设我有一门课:

class Dummy{
public  static ArrayList<String> varArray;
}
类虚拟{
公共静态数组列表varArray;
}
在另一节课上,我这样做:

Class Dummy2{

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

     }

}
类Dummy2{
void main()
{
ArrayList temp=Dummy.varArray;
}
}

现在假设在
Dummy2
中,我将元素添加到
temp
。更改是否会反映在
Dummy.varArray
中?因为这就是我的程序中正在发生的事情。我试着打印两个人的地址,他们都指向同一个地址。不知道
静态
字段是这样工作的。还是我做错了什么?

这与静态无关。语句
ArrayList temp=Dummy.varArray
表示两个变量都引用同一个arraylist。由于
varArray
是静态的,因此它只有一个副本

您可以读取
ArrayList temp=Dummy.varArray
as,变量temp现在引用的是Dummy.varArray引用的ArrayList对象


顺便说一下,您需要使用
publicstaticarraylistvararray=newarraylist()初始化它,然后再对其执行任何操作。

是,它运行正常

当你这么做的时候

ArrayList<String> temp = 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 
ArrayList temp=new ArrayList()//新名单
临时addAll(虚拟变量数组)//将这些值添加到我的列表中
Dummy.varArray.add(“newItem”);//temp中没有“newitem”
后面添加的元素不会神奇地添加到
temp
ArrayList temp=Dummy.varArray将获取所谓的参考副本(或浅层副本)。也就是说,它们将指向同一个对象

 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 

它不需要深度复制。请参见

static关键字表示该变量只有一个实例,而不是每个实例都有一个变量。

如果
varArray
不是静态的,这是真的吗?@Aneesh。如果您只是将一个引用分配给另一个引用,那么不管它是静态的还是非静态的。它们将引用同一对象。您可以阅读sureshatta的答案以获得更多澄清。感谢您的帮助@Aneesh-如果答案对你有帮助,就接受它!