Non so se la domanda è una emerita minkiata però vorrei sapere se è possibile effettuare un passaggio di variabile all'interno di una classe ad un suo metodo per riferimento.
Il fatto è che devo fare una funzione ricorsiva che crei un albero...
![]()
Non so se la domanda è una emerita minkiata però vorrei sapere se è possibile effettuare un passaggio di variabile all'interno di una classe ad un suo metodo per riferimento.
Il fatto è che devo fare una funzione ricorsiva che crei un albero...
![]()
Da
WMLScript.it
Come piffero faccio?![...]altri linguaggi come il C, permettono anche il passaggio di parametri “per riferimento”. In quel caso al metodo viene passato l'intero riferimento, non solo il suo indirizzo, con la conseguente possibilità di poter mutarne l'indirizzamento. Questa caratteristica non è stata importata in Java, perché considerata (a ragione) una minaccia alla sicurezza. Molti virus, worm etc… sfruttano infatti la tecnica del passaggio per riferimento.
In Java gli oggetti sono sempre passati per riferimento (in quanto puntatori) mentre i tipi primitivi sempre per valore.
Se vuoi passare un tipo primitivo per riferimento puoi usare la classe associata (Integer per int, Float per float, etc...)
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
grassie![]()
Oddio...
Ripensandoci, io sta cosa l'ho letta, l'ho memorizzata... pero' non faccio mai passsaggi di parametri in quel modo, uso sempre funzioni membro della classe.
Mo' faccio un po' di prove...
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
Ah, ecco, ho capito che cavolo c'era scritto in quel sito!!! Si', quello su cui lavori nel metodo che richiami e' un puntatore allo stesso oggetto (ergo, e' possibile modificare permanentemente l'oggetto che dai come parametro) ma non lo stesso puntatore (ergo, non puoi arbitrariamente puntare ad un altro oggetto)
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
adesso non ho capito io
[...]ma non lo stesso puntatore (ergo, non puoi arbitrariamente puntare ad un altro oggetto)
Intendo che la dicitura "per indirizzo", anziche' "per riferimento" e' certamente piu' corretta.
Quando scrivo
sto dicendo:codice:Date data = new Date (12, 3, 1979);
1) crea un nuovo oggetto di classe Date e inizializzalo coi valori che ti ho dato
2) crea una variabile che punta a un oggetto Date e inizializzala facendola puntare all'(indirizzo dell')oggetto appena creato
L'oggetto "12/3/1979" sara' creato in una certa locazione di memoria (chiamiamola 1000, cosi' per dire) in maniera indipendente dalla mia variabile data... Mi spiego, o meglio, ci provo...
In questo modo ho un'altra variabile che punta allo stesso oggetto puntato da data. Pero' attenzione: a miaDataDiNascita viene passato l'indirizzo dell'oggetto. In pratica punta a 1000! Quindi, se io scrivo:codice:Date miaDataDiNascita = data;
avro' che data punta ad un nuovo oggetto, che si trovera' in una locazione diversa (chiamiamola 2000) mentre miaDataDiNascita continua a puntare al 12 marzo 1979 (nella locazione 1000)codice:data= new Date ();
Nota che l'unico modo che ho per accedere al nuovo oggetto e' tramite la variabile data che lo punta. Se io la annullo:
l'oggetto e' perduto, non ho piu' modo di accedervi (e di li' a poco sara cannibalizzato dal Garbage Collector in quanto occupa spazio inutile!)codice:data=null
Detto cio'.
Quello che dice sul sito e' questo: mettiamo che ora l'assegnazione fra data e miaDataDiNascita la voglio fare in un metodo che richiamo appositamente:
e quindi nel mio programma scrivo:codice:public void assegna (Date d1, Date d2) { d2=d1; }
non ottengo l'effetto desiderato. Perche'?codice:Date data = new Date (12, 3, 1979); Date miaDataDiNascita; assegna (data,miaDataDiNascita);
Nel mio programma, prima di richiamare assegna ho che data punta lo stesso oggetto di prima (12/3/1979 alla locazione 1000) mentre miaDataDiNascita e' una variabile non inizializzata, quindi punta a un fantomatico oggetto "null"...
Quando richiamo assegna, avro' quindi questa situazione: d1 punta lo stesso oggetto puntato da data, quindi 12/3/1979 alla locazione 1000; d2 punta a "null".
Eseguo: d2 puntera' ora allo stesso oggetto puntato da d1. Cosa ho risolto? Nulla! Perche' miaDataDiNascita continuera' a puntare a "null"!!!
...
Credo di averti finito di confondere le idee, giusto?![]()
Folle e' l'uomo che parla alla luna.
Stolto chi non le presta ascolto.
già già già....
Porcazza la miseria io ho un problema elgato proprio al fatto che con sto fatto di puntatori mi perdo un oggetto..
Vado a spiegare l'inghippo...
Lavarando su applicazione WeB e per motivi di sviluppo ho dovuto mettere un oggetto in session...
Ora però questo oggetto deve essere preso e distrutto...
quindi dopo avere fatto
MioObject mioObject = session.getAttribute(mioAttribute)
faccio
session.remove(mioAttribute).
Ma dopo ciò.. il mio Puntatore mioObject punta a null per l'appunto e non ho idea di come fare... e il remove deve essere fatto immediatamente.. mi serve di fare un clone dell'oggetto.. avete qualche suggerimento?