Alessandro Stella
nov 17

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!

Tagged with:
nov 01

Non molto tempo fa abbiamo cercato di dipanare la matassa intorno alla gestione dei reference.
In questo post invece cerchiamo di capire come funzionano i dati primitivi nella memoria del PC.
Innanzitutto un dato primitvo NON è un oggetto!
Tuttavia, ogni dato primitivo ha una corrispondente wrapper class che può essere usata per rappresnetarlo come un oggetto. Ma in questo post non parleremo di questo.
Ci occuperemo invece di quali sono i dati primitivi in java e come vengono rappresentati nella RAM del PC.
Possiamo dividere i dati primitivi in 3 categorie:

  • integral types (byte, short, int, long e char)
  • floating-point types (float, double)
  • boolean type (boolean)

E’ lecito scrivere:

1
int intVar = 10;

Cosa succede nella RAM del PC quando noi scriviamo una tale istruzione?
La figura di seguito dovrebbe spiegarlo.
Il dato primitivo nella RAM
Nella cella di memoria con sfondo verde è stato inserito il valore del nostro tipo primitivo; in questo caso il valore 10. Da adesso in poi ogni istruzione di modifica della variabile intVar modificherà direttamente il valore contenuto in quella cella di memoria. Quindi scrivendo:

1
intVar = 163;

java modificherà per noi il contenuto della cella in figura.
E’ molto importante notare e capire che java gestisce in modo differente gli oggetti e i dati primitivi.

Tagged with:
ott 26

Questo è un argomento ostile, nel quale è facile perdersi, ma nello stesso tempo è la prima porta da aprire se si vuole entrare a pieno titolo nel mondo della programmazione java…

Innanzitutto distinguiamo tra reference value e object reference.
Un reference value rappresenta un valore (value) e precisamente il valore che viene restituto quando viene creato un particolare oggetto.
Un object reference (o semplicemnte reference) rappresenta invece una variabile che può memorizzare un reference value.
Questa differenza deve essere chiara perché altrimenti niente sarà mai chiaro con i reference in java!
Ora traduciamo questi concetti in codice.
Creiamo 2 object reference di tipo MiaClasse:

1
MiaClasse refOggetto1, refOggetto2;

Scrivendo questa riga di codice abbiamo comunicato a java di creare due variabili (nella RAM del calcolatore) di tipo MiaClasse e gli abbiamo anche detto che in queste 2 variabili DOVRANNO essere inseriti dei valori che si riferiranno (reference) a 2 oggetti di tipo MiaClasse. Stiamo parlando di “reference”! Questo significa che in queste 2 variabili java NON inserirà MAI gli oggetti veri e propri, ma il rifeimento a tali oggetti!!!
Rileggete bene l’ultimo paragrafo: è molto importante!

Bene. Inseriamo allora tali riferimenti ai 2 oggetti:

1
2
refOggetto1 = new MiaClasse(1);
refOggetto2 = new MiaClasse(2);

A questo punto java assegna un valore a refOggetto1 e un altro valore a refOggetto2. Ribadisco ancora che tale valore NON indica l’oggetto vero e proprio, ma indica la posizione (in RAM) dell’oggetto; il suo “riferimento”.
Si può rappresentare graficamente quanto detto con la seguente figura (scusate la poca eleganza).

Oggetti in RAM

In questa figura c’è rappresentato tutto quello che bisogna sapere sui reference!
Prosegui nella lettura di “Java, i reference e la RAM” »

Tagged with:
nascondi colonna destranascondi colonna destra
preload preload preload

Optimized by SEO Ultimate