2016-05-09 2 views
-2

я следующий кусок кода:Составляет ли listIterator.next() глубокую копию или мелкую копию?

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

} 

Я просто хочу знать,() возвращает ли iterator.next глубокую копию следующего пункта в resultSet или неглубоко?

+0

Это будет зависеть от типа 'resultSet'. – Eran

+0

@Eran Я думаю, что довольно безопасно предположить, что 'resultSet' является' List'. – dasblinkenlight

+1

@dasblinkenlight Но мы не можем предположить, какая реализация List это (хотя никакая реализация, которую я знаю, не возвращает глубокую копию, это не означает, что таких реализаций нет). – Eran

ответ

2

Предполагая, что resultSet является реализацией из стандартной библиотеки Java, ответ на вопрос «глубокой или мелкой копии» является «ни одним». ListIterator s из List классы в стандартной библиотеке Java не возвращают копию; они возвращают ссылку , поэтому вы получаете доступ к объекту, хранящемуся в List, а не его копии.

Поскольку массивы Java изменяемы, любые изменения, которые ваш цикл делает до data, выполняются на массиве Object[], хранящемся в списке.

Как Eran правильно отмечает в своем комментарии, так как List и ListIterator только интерфейсы, то вполне возможно, чтобы придумать реализацию, которая возвращает копию элементов списка, а не ссылки на фактические элементы. Эти копии могут быть глубокими или неглубокими, в зависимости от вашей собственной реализации. Однако реализации списков, предоставляемые библиотекой Java, всегда возвращают ссылки на фактические элементы списка.

Смежные вопросы