Java/Tipi di dato: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 44:
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 un costrutto specifico. Ogni cast implicito può essere reso esplicito, se si vuole (a volte è utile per chiarezza).
 
L'idea che sta alla base di questo meccanismo, in Java, è che, in presenza di un'operazione che potrebbe avere risultati non previsti, (peril es.programmatore deve "dichiarare" esplicitamente al compilatore di esserne consapevole e di volerla ugualmente effettuare<ref>L'esempio classico è la conversione di un ''float'' inverso unil tipo ''int'', potrebbeche può portare al troncamento del numero nel caso ci siano dei decimali. Questa operazione, ilinfatti, checostituisce, èdi fatto, una perdita di informazioni per il programma), e il programmatore devepotrebbe "dichiarare" esplicitamente al compilatore dinon esserne consapevole eal dimomento volerladella ugualmentescrittura effettuaredel codice</ref>. Questa "dichiarazione" viene effettuata scrivendo esplicitamente l'operatore di cast per la conversione.
 
Per quanto riguarda i tipi base:
*le conversioni ammesse sono quelle che coinvolgono i soli tipi numerici; cioè, non sono ammesse conversioni tra ''boolean'' e i tipi numerici.; si noti che Questoquesto comportamento è differente da quello che si ha nel C;
*al contrario, sono ammesse tutte le conversioni da un certo tipo numerico verso un altro tipo numerico;
*ma richiedono necessariamente il cast esplicito tutte le conversioni da un tipo numerico più "grande" ad uno più "piccolo" (per es. da ''long'' verso ''int'') o da un tipo con virgola verso un tipo intero.
 
Per quanto riguarda le classi:
Riga 55:
*le conversioni da un supertipo a un suo sottotipo (per es. da Collection ad ArrayList) richiedono cast esplicito.
Il motivo è che
*nel primo caso, la conversione riesce sempre,; poiché,per ad es.esempio, ogni istanza di String[http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html java.util.ArrayList] sicuramente è anche un'istanza di Object[http://download.oracle.com/javase/6/docs/api/java/util/Collection.html java.util.Collection];
*nel secondo, invece, potrebbe non riuscire: un oggetto [http://download.oracle.com/javase/6/docs/api/java/util/Collection.html Collection] potrebbe essere istanza di [http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html ArrayList], oppure di [http://download.oracle.com/javase/6/docs/api/java/util/LinkedList.html LinkedList], oppure di [http://download.oracle.com/javase/6/docs/api/java/util/HashSet.html HashSet], o di qualche altro tipo ancora.
 
Le specifiche di linguaggio affermano che, se si cerca di convertire un oggetto di un tipo X ad un altro tipo Y di cui l'oggetto '''non''' è istanza, allora vienea lanciatatempo unadi ClassCastException.esecuzione Questaviene regolalanciata vieneuna talvoltaeccezione utilizzata(di appostatipo nei[http://download.oracle.com/javase/6/docs/api/java/lang/ClassCastException.html programmiClassCastException]). ComeDalle siregole puòelencate notaresopra leggendorisulta leevidente regoleche quiuna sopra,ClassCastException inpuò questoessere lanciata casosolo ildalle programmatorerighe devedi percodice forzache averfanno messouso undi cast esplicito per la conversione.
 
== Gli Array ==