I parametri formali sono quelli dichiarati per tipo, numero e ordine nella definizione del metodo, mentre i parametri attuali sono quelli che vengono passati al metodo all’atto della chiamata. In Java il passaggio dei parametri avviene sempre e soltanto per valore; ciò significa che, all’atto dell’invocazione di un metodo, ogni parametro formale è inizializzato con il valore del corrispondente parametro attuale. In pratica è come se all’atto dell’invocazione del metodo a ogni parametro formale fosse assegnato il corrispondente parametro attuale per mezzo dell’operatore =. Fra parametri formali e attuali non è quindi necessario che esista una corrispondenza di tipo puntuale, ma deve esistere una corrispondenza tale da permettere la corretta esecuzione degli assegnamenti. Rifacendosi agli esempi precedenti, il codice a = area (3, 4, 'T');non crea nessun problema anche se i primi due parametri sono di tipo int anziché float, mentre se scriviamo
a = area (3.0, 4.0, 'T');
otteniamo un errore in compilazione in quanto i primi due parametri sono di tipo double e non è consentito assegnare un double a un float senza un cast.
Il fatto che i parametri attuali vengano copiati nei parametri formali implica che qualsiasi modifica venga fatta su questi ultimi, non va a incidere in nessun modo sui parametri attuali. Nell’esempio
class Parametri1
{
public static void main (String argv[]) {
double d = 30;
f (d);
System.out.println (d);
}
static void f (double d) {
d = 0;
}
}