写
是否更好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;
}
我认为第二个更好,应该更快,更多内存优化。但他们不相等吗?
答案 0 :(得分:135)
为了提高性能,通常最好使代码尽可能简单明了,这通常表现良好(因为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.
你不会比这更快。
答案 1 :(得分:54)
使用Integer.compare(int, int)
。除非你能证明你有性能问题,否则不要微观优化你的代码。
答案 2 :(得分:13)
我可以提出第三个
((Integer) a).compareTo(b)
答案 3 :(得分:6)
将int原语包装到Integer对象中会花费你一些内存,但差异只会在非常罕见的(内存需求)情况下显着(具有1000多个元素的数组)。我不建议这样使用新的Integer(int a)构造函数。这就足够了:
Integer a = 3;
关于比较,有Math.signum(双d)。
compare= (int) Math.signum(a-b);
答案 4 :(得分:4)
他们已经完成了。为什么不使用减法?
compare = a - b;
请注意,Integer.compareTo()并不一定只返回-1,0或1。
答案 5 :(得分:3)
对于1.7之前,我会说相当于Integer.compare(x,y)的是:
Integer.valueOf(x).compareTo(y);
答案 6 :(得分:1)
如果您使用的是java 8,则可以通过以下方法创建Comparator:
Comparator.comparingInt(i -> i);
如果您想与逆序进行比较:
Comparator.comparingInt(i -> -i);
答案 7 :(得分:0)
您可以通过位操作来完成此操作,如下所示:
(~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
答案 8 :(得分:0)
如果您只需要逻辑值(因为它几乎总是如此),以下单行将帮助您:
#include <fstream>
#include <memory>
#include <vector>
#include <ios>
int main()
{
std::vector<std::unique_ptr<std::ofstream>> streams;
auto os = std::make_unique<std::ofstream>("foo.txt", std::ios::binary | std::ios::app);
streams.push_back(std::move(os));
}
它甚至可以在Java 1.5+中工作,甚至可能在1.1(我没有)。请告诉我们,如果你可以在1.5 - 。
进行测试这个也会这样做:
boolean ifIntsEqual = !((Math.max(a,b) - Math.min(a, b)) > 0);