Вопрос в том, почему использовать сравнение вместо вычитания:
return thisVal - anotherVal;
Переведено автоматически
Ответ 1
Это связано с целочисленным переполнением. Когда thisVal очень велико и anotherVal отрицательно, то вычитание последнего из первого дает результат, который больше, чем thisVal который может превысить отрицательный диапазон.
Ответ 2
"Трюк" с вычитанием для сравнения двух числовых значений не работает!!!
inta= -2000000000; intb=2000000000; System.out.println(a - b); // prints "294967296"
Здесь, a < b, все же a - b есть положительный результат.
НЕ используйте эту идиому. Это не работает.
Более того, даже если это сработает, это НЕ обеспечит какого-либо существенного улучшения производительности и фактически может снизить читаемость.
Смотрите также
Java Puzzlers Головоломка 65: странная сага подозрительного рода
В этой головоломке есть несколько уроков. Наиболее конкретный из них: Не используйте компаратор на основе вычитания, если вы не уверены, что разница между значениями никогда не будет больше, чемInteger.MAX_VALUE. В более общем плане остерегайтесь int переполнения. Еще один урок заключается в том, что вам следует избегать "умного" кода. Стремитесь писать понятный, корректный код и не оптимизируйте его, если в этом нет необходимости.
Ответ 3
Проще говоря, int тип недостаточно велик, чтобы хранить разницу между двумя произвольными int значениями. Например, разница между 1,5 миллиардами и -1,5 миллиардами составляет 3,0 миллиарда, но int не может содержать значения, превышающие 2,1 миллиарда.
Ответ 4
Возможно, это для того, чтобы избежать переполнения / недостаточного потока.