java中clone是深拷贝还是浅拷贝

来源:4-8 索引堆(Index Heap)

厥~~~

2019-06-17

一直看资料都说.clone方法是浅拷贝不管对于数组还是对于list,但是今天验证了下感觉clone又是深拷贝,如下图:图片描述
对于a2进行删除元素原来arraylist a1并没有改变,这难道不是深拷贝么?
如果clone是浅拷贝,java中实现arraylist深拷贝的方法是什么?

写回答

1回答

liuyubobobo

2019-06-17

clone是浅拷贝。


这里说浅拷贝是指clone后ArrayList中的每一个元素都指向了原先元素的引用。所以一旦改变一个数组的元素另一个数组也会变化。


下面的代码用StringBuilder来说明问题应该很好理解

//img.mukewang.com/szimg/5d073b320001b2df21041548.jpg


Java本身不直接提供深拷贝的接口需要自己实现。自己手动将ArrayList的中的每个元素创建一个副本。


如果是自己设计的类可以自己覆盖clone的逻辑以保证他是一个深拷贝


更深入的内容不是这个课程的内容了。这不是一个Java语法课程抱歉。


继续加油

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程