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 specificheindicazioni dello standard [[w:IEEE 754|IEEE 754]].
 
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 lela specifichespecifica di linguaggio riconosconoriconosce che la conversione non può avere ''in nessun caso'' effetti indesiderati, allora è ammesso anche il cast implicito.
 
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 delledella specifichespecifica di linguaggio, non erano ammesse conversioni tra tipi primitivi e tipi riferimento, né tramite ''cast'' implicito, né tramite ''cast'' esplicito.
 
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 delledella specifichespecifica di linguaggio (Java 5) in poi, è ammesso il ''cast'' (implicito o esplicito) di un valore di un tipo primitivo verso il corrispondente tipo wrapper, e viceversa. Il compilatore sostituisce automaticamente questa sintassi con una istruzione che invoca i metodi o i costruttori del tipo wrapper.<br/>
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 delledella specifichespecifica di linguaggio], con particolare riferimento ai seguenti punti: [http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.7 5.1.7 Boxing Conversion], [http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#5.1.8 5.1.8 Unboxing Conversion]
*[http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html Guida al linguaggio Java, pagina ''Autoboxing'']