|
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...) |
|