Вычитание "хитрость" для сравнения двух числовых значений нарушено !!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
// prints "294967296"
Здесь a < b
, но a - b
положительно.
НЕ используйте эту идиому. Это не работает.
Более того, , даже если он работает , он НЕ обеспечит какое-либо значительное улучшение производительности и может фактически стоить читабельности.
Смотри также
- Java Puzzlers Головоломка 65: Странная сага подозрительного рода
Эта головоломка имеет несколько уроков. Наиболее конкретным является: Не используйте компаратор на основе вычитания, если вы не уверены, что разница между значениями никогда не будет больше, чем Integer.MAX_VALUE
. В целом остерегайтесь переполнения int
. Другой урок заключается в том, что вам следует избегать «умного» кода. Старайтесь писать ясный, правильный код и не оптимизируйте его, если в этом нет необходимости.