Newsgroup: it.comp.java
Titolo: riferimento anche per tipo base?

Salve a tutti.
in Java il passaggio dei parametri e' per valore anche se mi riferisco a 
tipi base?
In particolare dovrei fare Side-Effect su un intero. In C++ avrei 
dichiarato una funzione del tipo:
C& F(C in, int& ris)
in Java posso fare semplicemente:
public static C F(C in, int ris) ???
grazie
Salvatore

tipi base?
Si'. O la tua funzione ritorna un int, oppure - se devi ritornare piu' di un
singolo valore, un oggetto che incapsula tutti i valori di ritorno.
-- 
God is Real, unless declared Integer.
ObjectZone - 
http://space.tin.it/computer/csadun

Attenzione, in Java il passaggio parametri avviene sempre PER INDIRIZZO.
Ovviamente giocare su questo aspetto è pessima norma di programmazione,
perchè ti toglie visibilità chiara su quello che accade; quindi è molto
meglio
che fai restituire alla funzione un valore e lo raccogli nel punto in cui la
chiami.
il turco <tu...@turchia.tur> wrote in message
GZkh6.36597$GM6.1...@news.infostrada.it...


 Attenzione, in Java il passaggio parametri avviene sempre PER INDIRIZZO.
non x contraddirti, ma il passaggio avviene sempre per *valore*.
probabilmente fai confusione pensando al passaggio di un Object per
parametro: dato che e` il riferimento che viene passato per valore
questo non ti impedisce di accedere cmq all'oggetto in memoria e
modificarlo. Se invece si passano come parametri dei tipi primitivi
il passaggio per valore e` piu` evidente: tutte le modifiche fatte
sul parametro sono perse all'uscita del metodo.
-- 
Ciao,  |  I play Russian roulette everyday, a man's sport,
Matteo |  With a bullet called life, yeah called life, (SUGAR)

 sul parametro sono perse all'uscita del metodo.
si ok ma la mia domanda nasce da uno stupidissimo quesito d'esame. Si 
chiedeva di tradurre in java la funzione C++
class C
{ public:
    int primo, secondo;
};
C& F(C in, int& ris)
{ C* out = new C();  out->primo = in.secondo;  out->secondo = in.primo;
  if (in.primo == in.secondo) ris = 0;
  else if (in.primo > in.secondo) ris = 1;
  else ris = 2;
  return *out;
}
se scrivo semplicemente per F
public static C F(C in, int ris)
...
rieco a fare side-effect su ris?

 rieco a fare side-effect su ris?
no.
come ti ha gia` risposto Cristiano devi
adottare una strategia diversa.


 adottare una strategia diversa.
E usando oggetti di tipo Integer ?
Massimo

Allora si perchè Integer non è un tipo primitivo ma un Oggetto che
implemente i numeri interi...
Quindi potresti fire tutti i sede-Effects che ti pare.

 
non mi sembra che Integer abbia metodi del tipo
setValue( int newValue ). Puoi impostare il valore
rappresentato dall'oggetto Integer solo nel costruttore
(un po` come avviene per String) dopodiche` l'oggetto
risulta "immutabile" e se vuoi cambiare valore devi
creare un nuovo oggetto.
In questo caso, passando il riferimento per valore,
non potresti ottenere alcun side-effect sul parametro
poiche` creando un nuovo riferimento e` proprio il
riferimento che vai a cambiare (ne ottieni uno nuovo).
Cmq non sono sicuro al 100%: non ho alcuna documentazione
sottomano.
IMHO per risolvere il problema da te posto, la cosa piu`
semplice, se proprio non ti piace il consiglio di Cristiano,
e` invertire il parametro su cui fare side-effect e il tipo
restituito. Cioe`, anziche`:
	C& F( C in, int& ris )
scrivere l'equivalente di:
	int F( C in, C& out )
