Indice | Lezione Precedente – Lezione Successiva |
Il passaggio di parametri in Java avviene sempre per valore, qualsiasi variabile passata ad una procedura questa non verrà modificata. Il passaggio per riferimento in Java non è previsto. Come fare quindi a modificare un oggetto? Semplice:
public class TestPersona {
public static void main(String[] args){
Persona a = new Persona();
System.out.println("Numero: " + a.num); //Stampa 1
a.setNumero(2);
System.out.println("Numero: " + a.num); // Stampa 1
System.out.println("\nNome: " + a.nome); // Stampa Andrea
a.setNome(a);
System.out.println("\nNome: " + a.nome); // Stampa Marco
}
}
class Persona {
private String nome = "Andrea";
private int num = 1;
public void setNumero(int num) {
num=10; // La modifica avviene solo localmente
System.out.println("\nNumero: " + num); // Stampa 10
}
public void setNome(Persona pers){
pers.nome="Marco";
}
}
Compilando ed eseguendo il programma, avremo stampato:
Numero: 1
Numero: 10
Numero: 1
Nome: Andrea
Nome: Marco
perchè? Il passaggio dei parametri avviene per valore come possiamo vedere con la variabile num, la modifica localmente nel metodo setNumero non viene riportata al di fuori del metodo; ma se il parametro passato è di tipo reference, cosa succede? Solo le modifiche al riferimento non verranno salvate, le modifiche all’oggetto si! Come possiamo vedere verrà stampato Marco al posto di Andrea.
Ti piace l’articolo? |
![]() |
Indice | Lezione Precedente – Lezione Successiva |
Attento , vale solo per i tipi primitivi, quando il parametro è un oggetto non primitivo la JVM si comporta diversamente.
http://www.ba.infn.it/~zito/jsem/parametri.html
salve ,grazie mille per tutto , un domanda : ma dichiarando private le variabili poi dal main non sono accessibili ?
perchè ho provato a compilare e mi da errore nella dichiarazione ‘private ‘ di num e nome .
GRAZIE