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.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); } }
![]()