Si si sono perfettamente d'accordo con la tua spiegazione,
non vorrei aver fatto una domanda senza senso, in pratica io ho estratto il mio problema da alcune classi di java.
Da come ho osservato, spero non in modo sbagliato, le classi ArrayList e LinkedList di java che sono di tipo generico se istanziate come oggetto, all'invio del comando della add di un oggetto ne inseriscono uno completamente nuovo esempio:
ArrayList<Integer> ai = new ArrayList<>();
Integer i = new Integer(11);
ai.add(i);
Ovvero prendendo l'elemento in posizione 0 dell'ArrayList e l'oggetto i sono due oggetti distinti. Il perchè dipende dal fatto che è un intero o qualsiasi altra classe che permette di instanziare oggetti all'interno di queste Collezioni si comportano allora stesso modo? Ovvero l'ultima domanda si riferisce al fatto che se istanzio un oggetto di una qualsiasi classe e ne faccio la add, se confronto l'oggetto nell'ArrayList e l'oggetto stesso risulteranno diversi o sbaglio?
Aggiungo un ulteriore esempio per farti capire meglio:
ArrayList<String> ai= new ArrayList<>();
ai.add("aaaa");
ai.add("bbbb");
ai.add("cccc");
ai.add("dddd");
String s1 = new String("eeee");
ai.add(s1);
System.out.println(ai);
s1 = new String("ffff");
System.out.println(ai);
Con output:
[aaaa, bbbb, cccc, dddd]
[aaaa, bbbb, cccc, dddd, eeee]
[aaaa, bbbb, cccc, dddd, eeee]
Spero che tramite questo esempio tu capisca la mia domanda, ovvero se l'ArrayList<String> ha come ultimo elemento l'elemento s1, come riesce l'ArrayList<T> a capire come clonare quella Stringa s1?