|
Passaggio per valoreDato il codice static void A() { double x=1.0, y=2.0; System.out.println("A1: " + x + "\t" + y); B(x, y); System.out.println("A2: " + x + "\t" + y); } static void B(double p, double q) { System.out.println("B1: " + p + "\t" + q); p=p+q; System.out.println("B2: " + p + "\t" + q); } la sua esecuzione produrrà l'output A1: 1.0 2.0 B1: 1.0 2.0 // p e q assumono i valori di x e y B2: 3.0 2.0 // p e q subiscono degli aggiornamenti in B A2: 1.0 2.0 // x e y mantengono i valori precedenti... I parametri di tipo primitivo (byte, short, int, long, float, double, boolean, char) o String utilizzano il passaggio per VALORE (il parametro formale è una risorsa locale al metodo che ha come valore iniziale il valore del parametro attuale). Passaggio per riferimentoDato il codice static void A() { double x[]={1.0, 2.0}; System.out.println("A1: " + x[0] + "\t" + x[1]); B(x); System.out.println("A2: " + x[0] + "\t" + x[1]); } static void B(double v[]) { System.out.println("B1: " + v[0] + "\t" + v[1]); v[0]=v[0]+v[1]; System.out.println("B2: " + v[0] + "\t" + v[1]); } la sua esecuzione produrrà l'output A1: 1.0 2.0 B1: 1.0 2.0 // v assume il valore di x B2: 3.0 2.0 // v[0] subisce degli aggiornamenti in B A2: 3.0 2.0 // x[0] è cambiato... Anche il parametro di tipo NON primitivo (array, oggetto...) utilizza il passaggio per VALORE, ma siccome il suo valore è un RIFERIMENTO alla risorsa le modifiche su v[0] in B() in realtà avvengono su x[0] in A(). In Java NON è possibile modificare il valore del parametro ATTUALE, x, agendo sul parametro FORMALE, v, perché il passaggio è sempre per VALORE. Gli altri linguaggi sono più flessibili (anche troppo...) |
|