L'opérateur de transtypage (opérateur de "cast") permet de modifier explicitement le type d'une valeur avant de l'affecter à une variable ou de l'utiliser.
On écrit entre parenthèses le nom du nouveau type voulu, suivi de la valeur à transtyper, du nom de la variable contenant cette valeur, de l'opération fournissant cette valeur...
Il faut qu'il y ait compatibilité entre l'ancien et le nouveau type (qui doivent tous deux être des types primitifs).
Exemple : créer et exécuter la classe Transtyp 1
package initial; public class Transtyp1 { public static void main(String[] args) { ConsoleTexte mc=new ConsoleTexte(); mc.ecritln(12.5/3); mc.ecritln((int)12.5/3); } }
Attention, l'opérateur de cast est prioritaire sur les opérateurs binaires.
Exemple : créer et exécuter la classe Transtyp2 :
package initial; public class Transtyp2 { public static void main(String[] args) { ConsoleTexte mc=new ConsoleTexte(); mc.ecritln((float)10/3); mc.ecritln((float)(10/3)); } }
Les types numériques sont compatibles entre eux, et avec le type char. Par exemple créer et exécuter la classe Transtyp3
package initial; public class Transtyp3 { public static void main(String[] args) { ConsoleTexte mc=new ConsoleTexte(); mc.ecritln(51); mc.ecritln((char)51); mc.ecritln('3'); mc.ecritln((int)'3'); mc.ecritln(165.0/3); mc.ecritln((char)(165.0/3)); } }La seconde ligne convertit 51, qui était à priori une valeur numérique de type entier int, en un type char : elle affiche 3 (c'est une façon d'obtenir un caractère à partir de son code Unicode).
Le transtypage peut entraîner une perte d'information et le compilateur Java s'assurera que vous savez ce que vous faites s'il existe un risque. Par exemple, créez la classe suivante :
package initial; public class Transtyp4 { public static void main(String[] args) { double n1=3.0; double n2=3; int n=3; int n3=3.0; } }La ligne int n3=3.0; comporte une erreur signalée par une croix rouge dans la marge. Si vous placez la souris dessus, vous voyez apparaître le message "Type mismatch: cannot convert from double to int" et si vous cliquez Eclipse vous suggère deux correctifs possibles : caster en int ou changer le type de n3 en double.
Pour voir ce que peut entraîner un transtypage, modifiez la classe Transtyp4 ainsi :
package initial; public class Transtyp4 { public static void main(String[] args) { ConsoleTexte mc=new ConsoleTexte(); mc.ecritln("Donne moi un nombre (entier ou décimal) compris entre 33 et 127"); double entree=mc.getValeur(); mc.ecritln("comme un réel double: "+ entree); mc.ecritln("comme un entier sur 4 octets: "+(int)entree); mc.ecritln("comme un entier sur un octet: "+(byte)entree); mc.ecritln("comme un caractère, sur 2 octets: "+ (char) entree); } }L'instruction getValeur() permet ici de récupérer une valeur numérique fournie par l'utilisateur, dans un type double.