Java/Tipi di dato: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m trasformo fonti in biblio |
m specifiche ===> specifica |
||
Riga 29:
*''boolean'': ammette i soli valori ''true'' e ''false''.
*Tipi numerici interi: ''byte'' (un byte), ''char'' (2 byte), ''short'' (2 byte), ''int'' (4 byte), ''long'' (8 byte)
*Tipi numerici a virgola mobile: ''float'' e ''double''. Essi rispondono alle
Tutti i tipi numerici sono ''signed'', eccetto il ''char'', che è ''unsigned''.
Riga 46:
Le conversioni in Java si chiamano anche operazioni di ''cast''. Una conversione ammessa dal linguaggio può essere realizzata in due soli modi: con ''cast esplicito'' o con ''cast implicito''. Il primo si ha utilizzando l'apposito operatore; il secondo, invece, viene gestito in automatico dal compilatore e non ha una sintassi specifica. Ogni cast implicito può essere reso esplicito, se si vuole (a volte è utile per chiarezza).
L'idea che sta alla base di questa differenza è che, in presenza di una conversione che potrebbe avere risultati indesiderati, il programmatore deve "confermare" esplicitamente al compilatore di esserne consapevole e di volerla ugualmente effettuare<ref>L'esempio classico è la conversione di un numero con virgola (''float'' o ''double'') verso un tipo intero, perché una parte del numero va persa (i decimali). Il programmatore potrebbe non esserne consapevole al momento della scrittura del codice.</ref>. Questa "conferma" è scritta nell'operatore di cast esplicito. Se
Per quanto riguarda i tipi base:
Riga 78:
==== Autoboxing e unboxing ====
La famiglia dei tipi base e la famiglia dei tipi riferimento sono separate l'una dall'altra e definiscono due gerarchie distinte che non hanno alcun punto di giunzione. Per questo motivo, fino alla terza edizione
Ogni classe wrapper permette di associare un oggetto a un valore del tipo primitivo corrispondente, e viceversa. Ad esempio, è possibile ottenere un oggetto <tt>Integer</tt> partendo da un numero di tipo <tt>int</tt>, invocando il [http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#Integer(int) costruttore appropriato]; ed è possibile riottenere il numero intero invocando sull'oggetto il metodo [http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#intValue() intValue()]. Un discorso analogo vale per ciascuno degli altri tipi primitivi. L'operazione di inserimento di un valore primitivo in un oggetto prende il nome di ''boxing''.
Prima di Java 5, era necessario invocare esplicitamente i costruttori e i metodi <tt>xxxValue()</tt> appropriati. Per rendere più sintetico e leggibile il codice che richiama queste operazioni, dalla terza versione
L'operazione di inserimento di un valore primitivo in un oggetto ''tramite cast'' si chiama ''autoboxing''; l'operazione inversa (svolta sempre tramite cast) si chiama ''unboxing''.
Riga 122:
== Bibliografia ==
*[http://java.sun.com/docs/books/jls/third_edition/html/conversions.html Capitolo 5
*[http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html Guida al linguaggio Java, pagina ''Autoboxing'']
|