listIterator.next()是返回深拷贝还是浅拷贝?

时间:2016-05-09 13:53:59

标签: java deep-copy

我有以下代码:

ListIterator iterator = resultSet.listIterator();
while (iterator.hasNext()) {
   Object[] data = (Object[]) iterator.next();

}

我只想知道iterator.next()方法是否返回resultSet中的下一项的深层副本还是浅层?

1 个答案:

答案 0 :(得分:2)

假设resultSet是标准Java库中的List实现,那么"深层或浅层副本的答案"问题是"既不是"。标准Java库中ListIteratorList个类不返回副本;它们返回引用,因此您可以访问存储在List中的对象,而不是它的副本。

由于Java数组是可变的,因此您的循环对data所做的任何修改都是在列表中存储的Object[]数组上完成的。

正如Eran在他的评论中正确指出的那样,因为ListListIterator只是接口,所以完全可以设想一个返回列表元素副本而不是引用的实现实际的元素。这些副本可能很深或很浅,具体取决于您自己的实现。但是,Java库提供的列表实现始终返回对实际列表元素的引用。