Віднімання "фокусу" для порівняння двох числових значень порушено !!!
int a = -2000000000;
int b = 2000000000;
System.out.println(a - b);
Тут, a < b
ще a - b
позитивно.
НЕ використовуйте цю ідіому. Це не працює.
Більше того, навіть якщо це і спрацює , це НЕ забезпечить суттєвого покращення продуктивності, а насправді може коштувати читабельності.
Дивитися також
- Головоломки Java 65: Дивна сага про підозрілий
сорт
Ця головоломка має кілька уроків. Найбільш конкретним є: Не використовуйте порівняльник на основі віднімання, якщо ви не впевнені, що різниця між значеннями ніколи не буде більшою за Integer.MAX_VALUE
. Загальніше, остерігайтеся int
переповнення. Інший урок - слід уникати "розумного" коду. Намагайтеся писати чіткий, правильний код і не оптимізуйте його, якщо це не виявиться необхідним.