Лучше записать
int primitive1 = 3, primitive2 = 4;
Integer a = new Integer(primitive1);
Integer b = new Integer(primitive2);
int compare = a.compareTo(b);
или
int primitive1 = 3, primitive2 = 4;
int compare = (primitive1 > primitive2) ? 1 : 0;
if(compare == 0){
compare = (primitive1 == primitive2) ? 0 : -1;
}
Я думаю, что второй лучше, должно быть быстрее и больше оптимизированной памяти. Но разве они не, равняются?
Для производительности это обычно лучше всего для создания кода максимально простым и ясным и это будет часто работать хорошо (поскольку JIT оптимизирует этот код лучше всего). В Вашем случае самые простые примеры, также, вероятно, будут самыми быстрыми.
<час>я сделал бы, или
int cmp = a > b ? +1 : a < b ? -1 : 0;
или более длительная версия
int cmp;
if (a > b)
cmp = +1;
else if (a < b)
cmp = -1;
else
cmp = 0;
или
int cmp = Integer.compare(a, b); // in Java 7
int cmp = Double.compare(a, b); // before Java 7
лучше не создать объект, если Вы не должны.
мудрая Производительность, первое является лучшим.
, Если Вы знаете наверняка, что не получите переполнение, которое можно использовать
int cmp = a - b; // if you know there wont be an overflow.
, Вы не станете быстрее, чем это.
Используйте Integer.compare(int, int)
. И don'try для микрооптимизирования кода, если Вы не можете доказать, что у Вас есть проблема производительности.
Позвольте мне предложить треть
((Integer) a).compareTo(b)
Обертывание международного примитива в Целочисленный объект будет стоить Вам некоторой памяти, но разница будет только значительной в очень редком (спрос на память) случаи (массив с 1 000 + элементы). Я не рекомендую использовать новое Целое число (интервал a) конструктор этот путь. Это будет достаточно:
Integer a = 3;
О сравнении существует Math.signum (удвойте d).
compare= (int) Math.signum(a-b);
Они уже ints. Почему не только используют вычитание?
compare = a - b;
Примечание, что Integer.compareTo () не обязательно возвращает только-1, 0 или 1 также.
Поскольку пред 1,7 я сказал бы, что эквивалент Integer.compare (x, y):
Integer.valueOf(x).compareTo(y);
При использовании java 8 можно создать Компаратор этим методом:
Comparator.comparingInt(i -> i);
, если требуется соответствовать обратному порядку:
Comparator.comparingInt(i -> -i);
Можно сделать это через побитовую обработку, что-то вроде этого:
(~a - ~b) >>> 31 | -((a - b) >>> 31)
public static void main(String[] args)
{
int a = 107;
int b = 106;
check(a, b);
a = 106;
b = 106;
check(a, b);
a = 106;
b = 107;
check(a, b);
}
public static void check(int a, int b)
{
System.out.println((~a - ~b) >>> 31 | -((a - b) >>> 31));
}
ВЫВОД:
1
0
-1
При необходимости просто в логическом значении (как это почти всегда), следующая острота поможет Вам:
boolean ifIntsEqual = !((Math.max(a,b) - Math.min(a, b)) > 0);
И это работает даже в Java 1.5 +, возможно, даже в 1,1 (у меня нет одного). Скажите нам, если можно протестировать его в 1.5-.
Этот сделает также:
boolean ifIntsEqual = !((Math.abs(a-b)) > 0);