2016-02-29 196 views
-1

所以我想要做的是将一个字符串数组添加到我的Arraylist BDDvars。 我似乎面临的问题是,在向BDDvars列表添加'temp'(这是一个字符串数组)后,当我立即打印时,我得到了值。但是,在重新初始化temp后,我的数组列表中存在的值也会重置。希望对此有所帮助。谢谢!Java Arraylist重新初始化

代码是在这里:

List<String[]> BDDvars =new ArrayList<String[]>(); 

    BDDvars.add(temp); 
    System.out.println(BDDvars.get(0)[0]); // this gives value of temp 
    for(int n =0;n<11;n++) 
     temp[n] = ""; 
    System.out.println(BDDvars.get(0)[0]); // this gives empty string - why? 
+1

我们可以看到请在添加方法中的代码? – christopher

+1

您向数组添加了_reference_,而不是数组的副本。 –

+0

对不起,你能看到我编辑过的内容,看看你能更好地理解这个问题吗?谢谢 –

回答

2

当您添加tempBDDvars你没有创建一个新的阵列。相反,BDDvars中的temp和元素都使用相同的参考。

首先使数组的一个副本,如果你想修改温度,而不修改BDDvars值:

String[] tempCopy = new String[temp.length]; 
System.arraycopy(temp, 0, tempCopy, 0, temp.length); 
BDDvars.add(tempCopy); 

编辑

或使用clone

BDDvars.add(temp.clone()); 
+2

您不妨使用'.clone()'或'Arrays.copyOf',而不是自己执行'System.arraycopy'。 –

+0

@LouisWasserman哟,我认为那一个哈哈 – flakes

+1

优秀。这是我想要的。感谢您的及时响应! –