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 - passaggio x riferimento
Forum - Java - passaggio x riferimento

Avatar
franz (Normal User)
Newbie


Messaggi: 6
Iscritto: 08/08/2007

Segnala al moderatore
Postato alle 20:06
Sabato, 18/08/2007
Dubbio improvviso..... c'è un modo per passare a un metodo variabili x riferimento? Intendo variabili semplici come valori int ecc

Ad es

public void metodo1(int i)
{ i = 4; }
int t = 2;
metodo1(t);

alla fine di questo spezzone t sarà sempre 2.
Come si fa a passare a metodo1 non la copia ma il riferimento a t? Negli altri linguaggi è semplice, VB ha ByVal ByRef, Pascal omette la parola var.... ma in Java mi sono accorto che in qualsiasi manuale guardassi, non si trovavo indicazioni simili. (Parlo di metodi semplici, che evitino puntatori o capriole del genere possibilmente)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 2:01
Domenica, 19/08/2007
Se ricordo bene con i tipi nativi non si può; ma qualcuno mi corregga se sbaglio.


Il mio blog: https://piero.dev
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:11
Domenica, 19/08/2007
no infatti non si può, solo gli oggetti vengono passati a riferimento, ti consiglio quindi di accettare a parametro e passare in seguito ad esempio un Integer o una qualsiasi altra classe wapper.

Inoltre dalla versione 5 di Java con l'autoboxing e auto unboxing puoi fare cose come:

Integer i = 5;

e se dopo aver passato a riferimento vuoi passare as un metodo che vuole un int puoi cm passare un Integer che automaticamente verrà convertito in int

PM Quote
Avatar
franz (Normal User)
Newbie


Messaggi: 6
Iscritto: 08/08/2007

Segnala al moderatore
Postato alle 17:42
Giovedì, 23/08/2007
scusate forse non ho capito io ma passando un oggetto, come ad esempio in

Codice sorgente - presumibilmente Java

  1. Integer num = new Integer(3);
  2. metod(num);
  3. .....
  4. .....
  5. public void metod(Integer i)
  6. {
  7. i = 4;
  8. }



in num continua a essere presente 3 non 4.... il metodo non riesce a modificare neanche l'integer...

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 23:28
Giovedì, 23/08/2007
forse è per l'autoboxing che crea problemi, ora non ricordo se Integer ha un metodo per modificare l'intero contenuto o è costante, alla peggio prova ad usare i vettori, quelli di sicuro sono a riferimento, alla fin fine sono puntatori.

Cmq Java ha rimosso il passaggio a riferimento per motivi di sicurezza, se vuoi per curiosità fare comunque passaggi così ok, ma se è proprio per implementare un qualcosa cerca di trovare una soluzione che non li usa, se cadi in situazioni così deve esserci qualcosa che non va proprio nell'analisi del sistema tuo sistema OO.

Cmq riassumento, in Java solo oggetti e array sono a riferimento, il problema che hai potrebbe essere causato dall'autoboxing che crea riferimento incrociati fra stack e heap o qualche altra cosa; se trovo un attimo di tempo ti passerò un esempio funzionante, intanto cerca su google che ho trovato molte discussioni a riguardo.

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 10:29
Sabato, 08/09/2007
Ho controllato le classi wrapper sono immutabili (come string)) e quindi non possono essere usate per simulare un passaggio a riferimento.

Se vuoi passare a riferimento tipi base o usi il vettore o ti fai tu la classe non immutabile, però ripeto che la modifica di un parametro a riferimento non strettamente necessaria (come potrebbe essere passare un JFrame come parent a una JDialog ad esempio) è considerato effetto collaterale che di "default" non ci si deve aspettare.

PM Quote