compareTo with primitives -> Integer / int

2022-08-31 14:04:46

写得更好吗

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;
}

我认为第二个更好,应该更快,内存优化更多。但它们不是平等的吗?


答案 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.

你不会比这更快。


答案 2

使用 Integer.compare(int, int)。不要尝试微优化你的代码,除非你能证明你有一个性能问题。


推荐