Bonjour,
Je me demandais s'il y avait une raison au fait que Java ne gère pas les overflows des types numériques ?
Parce qu'en fait, je pense que c'est très largement possible de le faire dans le langage et ce serait tout de même plus confortable pour l'utilisateur et évidemment une source d'erreur en moins...
Je dis ça, parce que j'ai vu une présentation d'un programme permettant de détecter les overflow de types numériques dans un programme quelconque et j'ai trouvé étonnant que Java ne le fasse pas lui-même...
Qu'en dites-vous ?
Pensez-vous que ce soit juste pas simplicité ou est-ce qu'il y a une meilleure raison ? Et pensez-vous que ce soit une bonne idée de ne pas gérer ces overflows ou non ?
======
Pour ceux qui ne savent pas de quoi, je parle, essayez le code suivant :
Logiquement, ce calcul devrait donner 50000000000, mais ce nombre est plus grand que la valeur maximale de int (2147483647) et Java vous donne ce résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int i = 100000 * 500000; System.out.println(i);
Bluffant, non ?-1539607552
En fait, c'est tout simplement parce que le int étant codé sur du 32 bits, Java calcule le résultat et ne prend que les 32 derniers bits du résultat et les redonne.
Ce qui nous donne un nombre négatif...
Pour ceux qui ont de la peine avec le binaire, vous pouvez vous représenter ça comme un cercle dans lequel on tourne infinement, quand on atteint la limite maximale du nombre, on continuer à tourner mais le prochain nombre est le plus petit du type.
Donc si vous prenez la valeur maximale de int et vous lui rajoutez un, vous arrivez à la valeur minimale de int (-2147483648).
Partager