Java e il passaggio di parametri

Il sistema utilizzato da java per passare parametri ai metodi è molto semplice, eppure nella mia breve storia di programmatore java in molti mi hanno chiesto delucidazioni su questo argomento. In base alla mia esperienza posso dire che avere problemi nel capire come funziona il passaggio dei parametri in java significa avere problemi con reference e dati primitivi.
Quindi, per prima cosa, vi rimando alla lettura di tali post!

Se avete chiara la differenza tra un reference e un dato primitivo, diventa tutto facile.
In java i parametri vengono sempre passati per valore e sempre duplicati con copie locali al metodo.
Dovrebbe però essere chiaro che duplicare una variabile di tipo primitivo è diverso dal duplicare una varibile di tipo reference! Duplicare un reference significa avere 2 reference che puntano allo stesso oggetto! Ecco perché quando in un metodo modifico il valore di un parametro di tipo primitivo esso non modifica il valore del parametro fuori dal metodo, mentre quando uso un parametro di tipo reference ogni modifica apportata all’oggetto puntato da tale reference viene riflessa sull’oggetto puntato dal parametro esterno: entrambi i reference (essendo uno la copia dell’altro) puntano lo stesso oggetto!

5 Commenti

    1. Ciao omonimo,
      se ti trovi in una tale necessità è molto probabile che tu abbia sbagliato qualcosa nel disegno della tua applicazione 🙁
      Java è un linguaggio fortemente tipizzato; un metodo esiste solo in quanto parte di un oggetto. Per usare un metodo di tale oggetto in un altro metodo dovresti quindi passare l’oggetto come parametro… non il metodo!

  1. Maurizio

    Dici che è un grande, Giancarlo? Altro che grande! E’ mitico!
    Il mio prof son 3 giorni in Facoltà che si sbatte su ‘sta storia del reference e nessuno ci ha capito un tubo! Poi arrivo qui e con 20 righe di parole ferme, statiche, senza possibilità di essere spiegate meglio… tu, Alessandro, mi hai fatto capire tutto!!! Tu devi insegnare all’Università! Non scrivere su questo sito!!!

I commenti sono chiusi.