what is the general rule for determining without testing if Java methods deep copy?
<p>Here is one (typical?) example taken from the List.addAll doc that does not seem to say whether the additions to the target list will be deep copies.  Other than testing, what is the general method of quickly parsing documentation or general understanding that allows a determination if standard Java classes and methods deep copy?  <a href="http://download.oracle.com/javase/6/docs/api/java/util/List.html#addAll%28java.util.Collection%29" rel="nofollow">Oracle writeup on List.addAll</a></p>

<pre><code>addAll

boolean addAll(Collection&lt;? extends E&gt; c)

    Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator (optional operation). The behavior of this operation is undefined if the specified collection is modified while the operation is in progress. (Note that this will occur if the specified collection is this list, and it's nonempty.)

    Specified by:
        addAll in interface Collection&lt;E&gt;

    Parameters:
        c - collection containing elements to be added to this list 
    Returns:
        true if this list changed as a result of the call 
    Throws:
        UnsupportedOperationException - if the addAll operation is not supported by this list 
        ClassCastException - if the class of an element of the specified collection prevents it from being added to this list 
        NullPointerException - if the specified collection contains one or more null elements and this list does not permit null elements, or if the specified collection is null 
        IllegalArgumentException - if some property of an element of the specified collection prevents it from being added to this list
    See Also:
        add(Object)
</code></pre>
