In questo articolo, esploreremo le variabili in Java, un concetto fondamentale per chiunque si avvicini a questo linguaggio di programmazione. Una comprensione chiara delle variabili è essenziale per poter scrivere codice efficace e per gestire la memoria. Tratteremo variabili di istanza, variabili locali e parametri formali, illustrando le differenze attraverso esempi pratici.
Iniziamo con definire il concetto di variabile. Una variabile non è altro che una locazione di memoria nella quale viene salvato un determinato dato. Il nome con cui viene identificata una variabile, per esempio la variabile “numeroX” degli esempi precedenti, rappresenta l’indirizzo fisico in memoria in quella locazione.
Non tutte le variabili, però, sono uguali; infatti, a seconda del punto di codice in cui viene definita una variabile, questa assumerà un preciso significato. Legato a ciò possiamo collegare il concetto di scope di una variabile o visibilità. Prima di tutto, una variabile, per essere utilizzata per svolgere qualche operazione, deve essere prima dichiarata e poi inizializzata. Per la dichiarazione si fa riferimento al seguente codice:
int x;
Questo codice ha lo scopo di allocare in memoria una variabile referenziata dal nome “x”, che occuperà, in bit, la dimensione di un int. Di fatto, però, all’interno della variabile “x” non viene immagazzinato nessun valore; diciamo che la dichiarazione è quel processo che permette di allocare in memoria spazio sufficiente per poi inizializzare “x” con un numero intero. La fase di inizializzazione viene effettuata nel seguente codice:
x = 10;
In questo modo si va a scrivere il valore 10 all’interno della cella di memoria referenziata da “x”.
Tipi di variabili in Java
In Java sono presenti tre tipi di variabili: variabili di istanza, variabili locali e parametri formali. Andiamo adesso ad analizzarli singolarmente, fornendo qualche esempio per chiarire meglio i concetti.
Variabili di istanza
Le variabili di istanza sono quelle variabili che sono definite all’interno di una classe, ma fuori dai metodi della classe stessa. Le variabili di istanza possono essere considerate come gli attributi della classe.
public class Numeri {
public int numeroX;
public int numeroY;
}
Nel codice sopra, le variabili “numeroX” e “numeroY” sono dunque delle variabili di istanza. Queste variabili verranno deallocate dalla memoria non appena l’oggetto, istanza della classe, non esisterà più, per esempio quando il flusso dell’applicazione è terminato. Alcune variabili di istanza vengono definite come costanti, il cui valore rimarrà costante (non potrà essere modificato). Per definire una costante si utilizza la sintassi seguente:
public final int NUMEROZ = 10; //dichiaro una costante pari a 10
Variabili locali
Le variabili locali sono tutte quelle variabili che vengono dichiarate ed utilizzate all’interno dei metodi di una classe. Per esempio, nel seguente codice:
public int sottrazione(int x, int y) {
int sottrazione;
sottrazione = x - y;
return sottrazione;
}
La variabile “sottrazione” sarà dunque una variabile locale. È importante specificare che la visibilità delle variabili locali è relativa al metodo nel quale vengono dichiarate. Se cercassi di utilizzare la variabile “sottrazione” in un altro metodo, riceverei un errore del compilatore che indica che la variabile deve essere dichiarata, poiché non esiste nel contesto di quel metodo.
Una variabile locale viene deallocata non appena il metodo effettua il return e quindi ritorna al metodo principale main della classe.
Parametri formali
I parametri formali sono quelle variabili che vengono dichiarate all’interno delle parentesi tonde di un determinato metodo. Riferendosi al metodo sottrazione:
public int sottrazione(int x, int y)
Le variabili “x” ed “y” sono parametri formali. Con la dichiarazione soprastante, “x” e “y” sono state solo dichiarate e quindi non contengono nessun valore. L’inizializzazione delle variabili avverrà quando il metodo sottrazione viene richiamato e vengono passati due numeri nelle parentesi.
Da quanto visto, si può notare che “x”, “y” e “sottrazione” sono usate in modo simile. Quindi, possiamo chiederci: qual è la differenza concreta tra un parametro formale e una variabile locale? In pratica, non c’è alcuna differenza, ma possiamo considerare che un parametro formale è una sottocategoria delle variabili locali. Pertanto, i parametri formali avranno la stessa visibilità delle variabili locali e verranno deallocati non appena il metodo effettua il return.