Ciao a tutti, non ho capito un cosa sull'argomento in oggetto, ma prima vediamo i codici:
public class NamesProvider
{
private List<Person> names=null;
public NamesProvider()
{
names=new ArrayList<Person>();
Person name=new Person ("Paolo Rossi");
names.add(name);
name=new Person ("Andrea Verdi ");
names.add(name);
name=new Person ("Massimo Bianchi ");
names.add(name);
name=new Person ("Luigi Rosa");
names.add(name);
}
public List<Person> getNames()
{
return names;
}
}
public class Person
{
private String name=null;
public Person (String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setNam(String name) {
this.name = name;
}
}
E' stato creato un oggetto “names” che contiene una lista di nomi ordinati nelle seguenti posizioni:
- [0]: "Paolo Rossi"
- [1]: "Andrea Verdi"
- [2]: "Massimo Bianchi"
- [3]: "Luigi Rosa"
Per essere precisi, se non sbaglio, ad ogni posizione corrisponderà un indirizzo di memoria che punta all'oggetto "name" appena istanziato, nel quale troverò le variabili settate con il relativo nome e cognome.
Ora viene il problema...ma se ad ogni istanza di Person utilizzo come reference sempre lo stesso identificatore ("name"), significa che tale oggetto ("name") verrà ogni volta sovrascritto, quindi, visto che tutte le posizioni dell'ArrayList fanno riferimento a "name" dovremmo avere:
- [0]: "Luigi Rosa"
- [1]: "Luigi Rosa"
- [2]: "Luigi Rosa"
- [3]: "Luigi Rosa"
Ad esempio, se volessi recuperare il contenuto in [0] con un "String getName(int position)", dato che in tutte le posizioni dell'ArrayList è allocato lo stesso reference "name" (che dopo l'ultima istanza "vale" Luigi Rosa), potrei passare come argomento un qualsiasi valore tra 0, 1, 2 o 3 che otterrei sempre lo stesso ritorno cioè "Luigi Rosa".
Non capisco dov'è l'errore del mio ragionamento.....(chiedo scusa per la terminologia tecnica non sempre appropriata, spero comunque di essermi spiegato).