Java non permette il passaggio per riferimento: qualsiasi parametro Java è passato
by value.
Precisamente: tutti gli oggetti in Java sono indicati tramite puntatori: se esegui l'istruzione
- Codice: Seleziona tutto
String s = new String()
Crei un nuovo oggetto, e dichiari di voler usare l'identificatore
s per
riferirti a lui. Ora, se tu passi
s come parametro alla funzione
- Codice: Seleziona tutto
void change(String sl)
{
String k = "Ciao";
sl = k;
return;
}
Quello che succede è che tu passi alla funzione
un puntatore il cui valore è stato ricopiato in un altro puntatore. Ora, quando tu effettui l'assegnamento
- Codice: Seleziona tutto
sl = k
Quello che stai facendo è sostanzialmente cambiare il valore
del puntatore, ovvero stai dicendo al tuo programma "prendi il puntatore
sl e mettici dentro il valore del puntatore
k", ovvero ancora stai cambiando l'oggetto cui il tuo puntatore
sl punta,
ma non stai modificando assolutamente l'oggetto cui puntava prima.
Tutto chiaro?

Già che ci siamo: per convincerti di ciò che dico, prova ad eseguire questo codice:
- Codice: Seleziona tutto
public static void change(String ls)
{
String k = new String("Prova");
System.out.println("INIZIO: ls = " + ls);
ls = k;
System.out.println("FINE: ls = " + ls);
return;
}
public static void main(String args[])
{
String s;
s = new String("Ciao");
change(s);
System.out.println("s = " + s);
}