什么是浅拷贝
你会发现如果list1变了但是不对list2进行操作,但是打印的结果是list1和list2都发生了变化这就是浅拷贝。
众所周知,list本质上是数组,而数组的是以地址的形式进行存储。
如上图将list A浅拷贝给list B,由于进行的是浅拷贝,所以直接将A的内容复制给了B,java中相同内容的数组指向同一地址,即进行浅拷贝后A与B指向同一地址。
造成的后果就是,改变B的同时也会改变A,因为改变B就是改变B所指向地址的内容,由于A也指向同一地址,所以A与B一起改变。
什么是深拷贝
深拷贝就是将A复制给B的同时,给B创建新的地址,再将地址A的内容传递到地址B。ListA与ListB内容一致,但是由于所指向的地址不同,所以改变相互不受影响。
从代码到运行结果可以看出虽然oldlist发生了改变但是newlist没有改变。当然深拷贝还可以用序列化,clone等方法。
其实代码错在深拷贝和浅拷贝上是很低级的错我,希望看到这篇文章的童鞋们在list1 = list2 的时候一定要想list1被赋值是做什么的。在代码执行过程中有没有可能list2会发生变化。如果可能会发生变化那就要考虑对集合进行深拷贝了。