Comparer un entier avec les limites d'un octet (byte)
Dans l'étape précédente, nous avons appris sur la plage du type de données byte
(-128 à 127). Maintenant, voyons ce qui se passe lorsque nous essayons d'assigner une valeur entière en dehors de cette plage à une variable de type byte
.
Java dispose d'autres types de données entières comme int
, qui peuvent contenir des valeurs beaucoup plus grandes. Lorsque vous essayez de placer une valeur plus grande dans un conteneur plus petit (comme placer une valeur int
dans un byte
), vous risquez de rencontrer des problèmes.
-
Ouvrez le fichier HelloJava.java
dans l'éditeur WebIDE.
-
Modifiez la méthode main
pour inclure une valeur entière en dehors de la plage d'un octet (byte). Remplacez le code existant à l'intérieur de la méthode main
par le code suivant :
public static void main(String[] args) {
int largeIntValue = 200; // Cette valeur est en dehors de la plage d'un octet (byte)
// Tentative d'assigner une grande valeur int à une variable byte
// byte myByte = largeIntValue; // Cette ligne causera une erreur de compilation
System.out.println("Integer value: " + largeIntValue);
// Pour assigner un entier plus grand à un octet (byte), vous avez besoin d'un cast
byte castedByte = (byte) largeIntValue;
System.out.println("Casted byte value: " + castedByte);
}
Examinons les modifications :
- Nous déclarons une variable
int
nommée largeIntValue
et lui assignons la valeur 200, qui est supérieure à la valeur maximale qu'un byte
peut contenir (127).
- La ligne commentée
byte myByte = largeIntValue;
montre ce qui se passerait si vous essayiez directement d'assigner largeIntValue
à un byte
. Cela entraînerait une erreur de compilation car Java vous empêche de perdre potentiellement des données sans lui avoir explicitement demandé de le faire.
- La ligne
byte castedByte = (byte) largeIntValue;
montre comment forcer l'assignation en utilisant un cast de type. Le (byte)
avant largeIntValue
indique à Java de convertir la valeur int
en un byte
.
-
Enregistrez le fichier (Ctrl+S ou Cmd+S).
-
Maintenant, essayez de compiler le programme modifié dans le terminal :
javac HelloJava.java
Cette fois, la compilation devrait réussir car nous avons utilisé un cast de type.
-
Exécutez le programme compilé :
java HelloJava
Vous verrez la sortie suivante :
Integer value: 200
Casted byte value: -56
Notez que la valeur de castedByte
est -56, et non 200. Cela s'explique par le fait que lorsque vous effectuez un cast d'une valeur en dehors de la plage du type cible, la valeur "reboucle". Cela est connu sous le nom de débordement (ou sous-débordement pour les nombres négatifs). La valeur 200 est représentée en binaire, et lorsqu'elle est tronquée pour s'adapter à 8 bits (un octet), cela donne la valeur -56.
Cette étape souligne l'importance de comprendre les plages des types de données et d'utiliser avec soin le cast de type lors de la conversion entre différents types pour éviter des résultats inattendus dus au débordement ou au sous-débordement.