„Sztuczka” odejmowania polegająca na porównaniu dwóch wartości liczbowych jest zepsuta !!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
Tutaj a < b
jednak a - b
jest pozytywne.
NIE używaj tego idiomu. To nie działa.
Co więcej, nawet jeśli zadziała , NIE zadziała zapewni żadnej znaczącej poprawy wydajności i może w rzeczywistości kosztować czytelność.
Zobacz też
- Java Puzzlers Puzzle 65: A Strange Saga of Suspicious Rodzaj
Ta łamigłówka ma kilka lekcji. Najbardziej szczegółowe to: Nie używaj komparatora opartego na odejmowaniu, chyba że masz pewność, że różnica między wartościami nigdy nie będzie większa niż Integer.MAX_VALUE
. Mówiąc bardziej ogólnie, uważaj na int
przepełnienie. Inną lekcją jest to, że należy unikać „sprytnego” kodu. Staraj się pisać jasny, poprawny kod i nie optymalizuj go, chyba że okaże się to konieczne.