我遇到过arrayLists的一个奇怪问题。我宣布并初始化其中两个:
private ArrayList<String> arrayList1;
private ArrayList<String> arrayList2;
[..]
public void onCreate(Bundle savedInstanceState) {
[..]
arrayList1 = new ArrayList<>();
arrayList2 = new ArrayList<>();
}
当我向其中一个添加字符串时,它会自动添加到另一个:
arrayList1.add(new String("string1"));
这两行都发生了添加,我使用断点检查了很多次。起初我认为它必须与传递引用而不是值相关,我将.add(“string1”)更改为.add(new String(“String1”))但它不起作用。
过了一会儿,我发现两个数组都有这个Id,它显示了Logcat的相同内容:
arrayList1 = {java.util.ArrayList@830033171248} size = 1
arrayList2 = {java.util.ArrayList@830033171248} size = 1
也许这会造成问题,但我无法想象为什么会发生这种情况以及如何解决它。我开始使用android开发,所以也许这是一个愚蠢的问题,但我试图找到解释很长一段时间没有成功。 非常感谢你! 此致!
修改
代码中没有类似于arrayList1 = arrayList2的内容。
当在onCreate方法初始化arrayLists时,ArrayList @之后的数字不同,但我不知道为什么以及在某个未知的地方意外地改变了它。我在每种方法都有断点,并且阵列的地址在任何方法中都没有变化。我在UI中有几个复选框,当我选中其中一个时,在复选框的监听器中我可以看到arrayLists的地址(ArrayList @之后的数字)已经改变并且变得相同。非常讨厌和奇怪。
答案 0 :(得分:3)
很明显,你的两个变量都指向同一个ArrayList实例,我们知道Java肯定会处理引用很好,所以我们必须假设某些代码存在问题你还没有把你所做的事情包括在arrayList1 = arrayList2
如果您发布了一个可以重现问题的精简代码示例,那么我们可以提供更多帮助。
答案 1 :(得分:0)
在oncreate()上面声明 private ArrayList arrayList1 = new ArrayList(); ,确保你没有使用 array1 = array2 , array1.addAll(array2) )等....
答案 2 :(得分:0)
可能看起来很愚蠢,但你有没有尝试过:
arrayList1.add("string1");
arrayList2.add("string2");
如果不是这样的话,那么指针,Java和你的PC设置似乎有问题。
答案 3 :(得分:-1)
尝试使用声明创建对象
private ArrayList<String> arrayList1=new ArrayList<String>();
private ArrayList<String> arrayList2=new ArrayList<String>();
最好指定String
,即数组中项目的类型