La soustraction "truc" pour comparer deux valeur numérique est cassé!!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
// prints "294967296"
Ici, a < b
, encore a - b
est positif.
NE PAS utiliser cet idiome. Il ne fonctionne pas.
En outre, même si cela fonctionne, il ne sera PAS fournir une amélioration significative dans les performances, et peut, en fait, le coût de la lisibilité.
Voir aussi
-
Java casse-têtes de Puzzle de 65 ans: Une Étrange Saga des Suspects de Tri
Ce puzzle a plusieurs leçons. Le plus spécifique est: Ne pas utiliser une soustraction à base comparateur sauf si vous êtes sûr que la différence entre les valeurs ne sera jamais plus grand que Integer.MAX_VALUE
. De manière plus générale, méfiez-vous de l' int
de dépassement. Une autre leçon est que vous devriez éviter de "sage" du code. S'efforcer d'écrire clairement, le code est correct, et ne pas l'optimiser, sauf si cela s'avère nécessaire.