codice:
class A{
int val = 100;
static void incrementa(int i){
i = i + 1;
}
static void annulla(A a){
a.val = 0;
a = null;
}
public static void main(String[] args){
int i = 0;
System.out.println("valore di i prima di invocare 'incrementa(i)': " + i);
incrementa(i);
System.out.println("valore di i dopo che è stato invocato 'incrementa(i)': " + i);
System.out.println();
A a = new A();
System.out.println("valore di 'a' prima di invocare 'annulla(a)': " + a);
System.out.println("valore di 'a.val' prima di invocare 'annulla(a)': " + a.val);
annulla(a);
System.out.println();
System.out.println("valore di 'a' dopo che è stato invocato 'annulla(a)': " + a);
System.out.println("valore di 'a.val' dopo che è stato invocato 'annulla(a)': " + a.val);
}
}
Puoi notare che i valori di 'i' e di 'a' restano uguali prima e dopo l'invocazione dei metodi, perche questi parametri sono appunto passati per valore e restano immodificati, mentre il campo a.val viene modificato dal metodo annulla.