若已存在具有数据的对象A,现想通过A让对象B也获得同样的存储内容,不可以直接使用“=”进行赋值。
两对象之间使用“=”是将引用所指地址进行赋值,而不是内存块的内容。
比如两个集合之间的赋值:
List list1 = new ArrayList(); List list2 = new ArrayList(); String url1 = "1"; String url2 = "2"; list1.add(url1); list1.add(url2); list2 = list1; //通过“=”运算符,此时list2与list1指向同一块内存地址,list2原先分配的内存地址被回收 list1.clear(); Log.d("list1Size", "" + list1.size());//size = 0 Log.d("list2Size", "" + list2.size());//size = 0
针对以上赋值问题则需要用到对象克隆等方法,在此简单阐述ArrayList对象拷贝的几种方法(自定义数据类型的小伙伴可以深入了解下其他网友的重写clone()等方法):
1.利用集合构造方法:
list2 = new ArrayList(list1);
2.利用clone()方法:
list2 = (List) ((ArrayList) list1).clone();
3.利用addAll()方法:
list2.addAll(list1);
4.利用add()方法:
for (Object list : list1){ list2.add(list); }