Passaggio dei parametri in Java

Le variabili associate a tipi primitivi sono passate a un metodo come valore.

Cioe' viene fatta una copia e questa e' passata al metodo. Modifiche al valore passato non influenzano la variabile nel codice che richiama il metodo:

  ...   

  int i=2;
  A_Class a;

  a.A_method(i);

  j=i;//j=i=2 non 5
  ...

 public class A_Class{
  ...

   void A_method(int k){
     int i=10*k; 
     k=5;
     ...
   }
 }

Java tratta le variabili collegati ad oggetti come riferimento agli stessi.

Questo riferimento contiene l'indirizzo in memoria di un oggetto. Ma a differenza dei puntatori C++

  • e' impossibile conoscerne il valore.
  • i valori del riferimento non possono essere alterati
  • e' possibile convertirli solo a superclassi o sottoclassi dello stesso oggetto. , mai a altri tipi di dati.

  ...
  
A_Class a,b;
  a=new A_Class();
  b=new A_Class();
  ...
  a.i = 4;
  b.i = 40;
  ...
  a=b;
  a.i = 400;
  ...
  int j=b.i;// =400
    dato che a e b ora puntano
    allo stesso
   
oggetto.
  ...

 public class A_Class{
 
int i=2;
   ...
 }

Gli oggetti sono passati ai metodi per riferimento. Percio' l'oggetto referenziato puo' essere modificato dal metodo.

Comunque, il riferimento stesso e' passato per valore, cioe' viene fatta una copia del valore dell'indirizzo in memoria dell'oggetto.

Cosi' se la variabile corrispondente nel metodo e' modificata, non si avra'alcun effetto sulla variabile originale.

  ...   

  int i=2;
  A_Class a;
  B_Class b;
 
  a = new A_Class();
  b = new B_Class();

  b.j = 5;   

  a.A_method(b);

  j=b.j;//j=20 non 5
          ne' 100
  ...

 public class A_Class{
  ...

  void A_method(B_Class bb){
    bb.j=20;
     ...
    bb= new B_Class();
    bb.j=100;
   }
 }

 public class B_Class{
  int j=0;
   ...
   }
 }

Nota: il test

       if(a==b)...

controlla solo se a e b puntano allo stesso oggetto, non se essi hanno gli stessi valori delle proprieta'.

Alcune classi forniscono un metodo

       a.equals(b)

che ritorna true se l'oggetto a e' identico a b


Maintained by Giuseppe Zito :info@zitogiuseppe.com
Ultimo aggiornamento: