 <p>Assuming that <code>resultSet</code> is a <code>List</code> implementation from the standard Java library, the answer to the "deep or shallow copy" question is "neither". <code>ListIterator</code>s of <code>List</code> classes in the standard Java library do not return a copy; they returns a <em>reference</em>, so you access the object stored in the <code>List</code>, not a copy of it.</p> <p>Since Java arrays are mutable, any modifications that your loop makes to <code>data</code> are done on the <code>Object[]</code> array stored inside the list.</p> <p>As <a href="http://stackoverflow.com/users/1221571/eran">Eran</a> correctly notes in his comment, since <code>List</code> and <code>ListIterator</code> are only interfaces, it is entirely conceivable to come up with an implementation that returns copies of list elements rather than references to actual elements. These copies could be deep or shallow, depending on your own implementation. However, list implementations supplied by Java library always return references to actual list elements.</p>