« Et maintenant, pour la partie la plus intéressante. Je vais te parler des conversions de types. Les variables ne peuvent pas changer de type, mais il est possible de convertir des types. Pour ce faire, nous utilisons une opération d'affectation. »

« Tu peux affecter des variables de différents types entre elles. Ce faisant, la valeur d'une variable (d'un type particulier) est convertie en une valeur de l'autre type et affectée à l'autre variable. »

« Nous pouvons parler de deux types de conversion : les conversions de valeurs primitives avec élargissement ou réduction. L'élargissement équivaut à déplacer des objets d'un petit panier à un grand. C'est une procédure banale et indolore. La réduction reviendrait au contraire à prendre beaucoup de choses dans un grand panier et à les mettre dans un petit.. Si tu fais ça, tu manqueras peut-être de place, et tu pourrais avoir à abandonner quelque chose. »

« Voici les types triés selon leur taille de 'panier' : »

Conversion de types - 1

« Quelques commentaires :

1. Le panier de char est de la même taille que pour short, mais tu ne peux pas déplacer les choses librement de l'un à l'autre. Quand tu déplaces quelque chose de short à char, les valeurs inférieures à 0 sont toujours perdues. Lorsque tu déplaces des valeurs de int à short, les valeurs supérieures à 32 000 sont perdues.

2. Lorsque tu transformes des entiers en nombres fractionnaires, les chiffres les moins significatifs du nombre peuvent être abandonnés. Cependant, c'est acceptable, car le but d'un nombre fractionnaire est de stocker une valeur approximative. »

"Lorsque nous effectuons des conversions avec réduction, nous devons dire explicitement au compilateur que ce n'est pas une erreur : nous abandonnons sciemment une partie du nombre. Nous utilisons un opérateur de conversion (c'est-à-dire le nom du type entre parenthèses) pour ce faire. »

« Voici comment tu dois affecter des variables de types différents : »

Code Java Description
byte a = 115;
int b = a;
Conversion de primitive avec élargissement. Tout se passe très bien.
int c = 10000;
byte d = (byte) c;
Conversion de primitive avec réduction. Nous devons indiquer explicitement que les octets supplémentaires doivent être abandonnés.
int c = 10;
byte d = (byte) c;
Conversion de primitive avec réduction. Nous devons indiquer explicitement que les octets supplémentaires doivent être abandonnés, même s'ils valent 0.
float f = 10000;
long l = (long) (f * f);
float f2 = l;
long l2 = (long) f2;
Lorsque nous affectons une valeur à un float, une conversion de primitive avec élargissement a lieu. Lorsque nous affectons un float à un long, une conversion de primitive avec réduction a lieu. Un opérateur de conversion est nécessaire.
double d = 1;
float f = (float) d;
long l = (long) f;
int i = (int) l;
short s = (short) i;
byte b = (byte) s;
Des conversions avec réduction dans toutes les opérations d'affectation, à l'exception de la première ligne. Ces conversions nécessitent que nous indiquions explicitement la conversion de type.
3
Mission
Syntaxe Java,  niveau 10leçon 3
Bloqué
Saisie de code
Parfois, inutile de réfléchir, il suffit de le marteler ! Aussi paradoxal que cela puisse paraître, il arrive que tes doigts se « souviennent » mieux des choses que ton esprit conscient. C'est pourquoi la formation du centre secret CodeGym comprend parfois des tâches qui t'obligent à saisir le code. En saisissant le code, tu t'habitues à la syntaxe et tu gagnes un peu de matière noire. Et rien de mieux pour combattre la paresse !

« Un opérateur de conversion doit être placé avant un nombre/une variable chaque fois qu'une partie du nombre est abandonnée ou qu'une conversion de primitive avec réduction est effectuée. L'opérateur de conversion affecte uniquement le nombre/la variable qui suit directement. »

Code Java Description
float f = 10000;
long l = (long) f * f;
Une seule des deux variables est convertie en long : la multiplication d'un long et d'un float donne un float.
float f = 10000;
long l = (long) (f * f);
L'expression entière est convertie en long.

« Je vois. »