Android list1.addAll(list2)和list1=list2的区别

今天从服务器拉去数据,获取数组数据直接
this.sourceDateList.addAll(sourceDateList);
然后进行一下操作

if (TextUtils.isEmpty(filterStr)) {    
   filterDateList=sourceDateList;    
LogUtils.d("log", "=======2=return");
} else {  
filterDateList.clear();
}
LogUtils.d("log", "======= sourceDateList 长度" + sourceDateList.size() );    

我在else里面filterDateList.clear();清空了列表,但是再取sourceDateList的时候,sourceDateList的数据居然也为0了,找了半天没找到在哪里sourceDateList.clear(); 后来发现了 filterDateList=sourceDateList;

修改代码

if (TextUtils.isEmpty(filterStr)) {    
filterDateList.clear();    
filterDateList.addAll(sourceDateList) ;     
LogUtils.d("log", "=======2=return");
} else {  
    filterDateList.clear();
}
LogUtils.d("log", "======= sourceDateList 长度" + sourceDateList.size() );  

再取sourceDateList数组时就不是0了

总结

addAll 只是单纯的把数据添加给fitterDateList ,而A= B而是把B的地址赋值给了A,把A的地址指向了B,也就是两个list公用了一个地址,当filterDateList.clear();时sourceDateList也为空了。
所以谨慎使用list1=list2 ,
要代替使用list1.addAll(list2);

你可能感兴趣的:(Android list1.addAll(list2)和list1=list2的区别)