Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Riferimenti ad oggetti
Forum - Java - Riferimenti ad oggetti

Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 21:39
Venerdì, 23/10/2009
Ciao a tutti!!
Vado subito al sodo...
Ipotiziamo di avere tre oggetti: Condominio e Inquilino:

sorgente di Condominio:
Codice sorgente - presumibilmente Java

  1. public class Condominio {
  2.    
  3.     public Vector inquilini;
  4.  
  5.     public Condominio() {
  6.         inquilini = new Vector();
  7.     }
  8. }



se ora io creassi l'oggetto Condominio, aggiungendoli due inquilini:

Codice sorgente - presumibilmente Java

  1. Condominio c = new Condominio();
  2.     c.inquilini.addElement(new Inquilino("Luca"));
  3.     c.inquilini.addElement(new Inquilino("Piero"));



e poi lo passassi come parametro a due classi A e B, successivamente aggiungo altri due inquilini al condominio passato come parametro:

Codice sorgente - presumibilmente Java

  1. public class A {
  2.     public A(Condominio c) {
  3.         c.inquilini.addElement(new Inquilino("Antonio"));
  4.         c.inquilini.addElement(new Inquilino("Roberto"));
  5.     }
  6. }
  7.  
  8. public class B {
  9.     public B(Condominio c) {
  10.         c.inquilini.addElement(new Inquilino("Francesco"));
  11.         c.inquilini.addElement(new Inquilino("Guido"));
  12.     }
  13. }



se fatto questo, dopo aver aggiunto i due inquilini, nel costruttore della classe A aggiungo:
Codice sorgente - presumibilmente Plain Text

  1. System.out.println(c.inquilini.siize());



l'output sarà: 4 o 8??

ciao ciao e grazie per l'attenzione :k::k::k::k:

ps: spero di essere stato chiaro....:-?:-?:-?

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 16:26
Sabato, 24/10/2009
gli oggetti in java sono solo come riferimento, quindi leggi/scrivi sempre lo stesso oggetto; non vengono fatte implicitamente delle copie come avviene nei tipi base.

per avere un passaggio per valore devi tu dentro al metodo/costruttore copiare l'oggetto con clone() (se poi serve una copia profonda devi implementare Cloneable, ricorsivamente clonare le istanze della classe ecc...)

Ultima modifica effettuata da netarrow il 24/10/2009 alle 16:26
PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 17:51
Sabato, 24/10/2009
Grazie mille!!
Ma se all'oggetto condominio aggiungo un listener, sia dentro la classe A che B, con metodi diversi, al momento dell'invocazione verrà eseguito il metodo aggiunto nella classe A o in
B??

ciaociao

PM Quote