|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
[java] dubbio atroce su ArrayList
sto usando una variabile di tipo ArrayList per memorizzare una serie di oggetti di tipo stringa...
da quanto io ho sempre saputo, il metodo "add(Object o)" di ArrayList, non copia l'oggetto passato nella lista, bensì ne copia il puntatore...in questo modo se modifico l'oggetto "Object o" la modifica si ripercuote anche sull'oggetto memorizzato nella lista... invece qua: Codice:
ArrayList lista = new ArrayList(); str = new String("CIAO"); lista.add(str); str = "SALVE"; System.out.println(lista,get(0)); dato che ho usato il meotodo "add(str)" se modifico l'oggetto "str" questa modifica si dovrebbe ripercuotere anche sugli elementi dell'arraylist...come mai in questo caso non è così? grazie a tutti e buna fine dell'anno
__________________
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non è così per un motivo semplice: "str" NON è un oggetto! "str" è solamente un riferimento ad un oggetto... ma a che oggetto? All'oggetto a cui sta puntando attualmente.
Ovvero: nel momento in cui nel tuo codice fai questo: Codice:
lista.add(str); Codice:
str = new String("CIAO"); Infatti, quando poi fai: Codice:
str = "SALVE"; Puoi pensare che quando fai: Codice:
lista.add(str); Poi il riferimento "str" lo puoi anche far puntare ad altri oggetti, tanto la lista ha il suo riferimento. Ciao ![]() Ultima modifica di banryu79 : 31-12-2007 alle 13:23. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
mi ero già risposto da solo dopo aver fatto il post, solo che ormai era troppo tardi per cancellarlo
![]() stamattina credo di aver lasciato la testa sul cuscino ciao e buon anno a tutti!
__________________
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:32.