我有以下代码:
ListIterator iterator = resultSet.listIterator();
while (iterator.hasNext()) {
Object[] data = (Object[]) iterator.next();
}
我只想知道iterator.next()方法是否返回resultSet
中的下一项的深层副本还是浅层?
答案 0 :(得分:2)
假设resultSet
是标准Java库中的List
实现,那么"深层或浅层副本的答案"问题是"既不是"。标准Java库中ListIterator
个List
个类不返回副本;它们返回引用,因此您可以访问存储在List
中的对象,而不是它的副本。
由于Java数组是可变的,因此您的循环对data
所做的任何修改都是在列表中存储的Object[]
数组上完成的。
正如Eran在他的评论中正确指出的那样,因为List
和ListIterator
只是接口,所以完全可以设想一个返回列表元素副本而不是引用的实现实际的元素。这些副本可能很深或很浅,具体取决于您自己的实现。但是,Java库提供的列表实现始终返回对实际列表元素的引用。