Mar*_*era 62 java performance compareto
写作更好吗?
int primitive1 = 3, primitive2 = 4;
Integer a = new Integer(primitive1);
Integer b = new Integer(primitive2);
int compare = a.compareTo(b);
Run Code Online (Sandbox Code Playgroud)
要么
int primitive1 = 3, primitive2 = 4;
int compare = (primitive1 > primitive2) ? 1 : 0;
if(compare == 0){
compare = (primitive1 == primitive2) ? 0 : -1;
}
Run Code Online (Sandbox Code Playgroud)
我认为第二个更好,应该更快,更多的内存优化.但他们不是一样的吗?
Pet*_*rey 137
为了提高性能,通常最好使代码尽可能简单明了,这通常表现良好(因为JIT会优化这段代码).在您的情况下,最简单的示例也可能是最快的.
我会做的
int cmp = a > b ? +1 : a < b ? -1 : 0;
Run Code Online (Sandbox Code Playgroud)
或更长的版本
int cmp;
if (a > b)
cmp = +1;
else if (a < b)
cmp = -1;
else
cmp = 0;
Run Code Online (Sandbox Code Playgroud)
要么
int cmp = Integer.compare(a, b); // in Java 7
int cmp = Double.compare(a, b); // before Java 7
Run Code Online (Sandbox Code Playgroud)
如果您不需要,最好不要创建对象.
性能方面,第一是最好的.
如果您确定无法获得溢出,则可以使用
int cmp = a - b; // if you know there wont be an overflow.
Run Code Online (Sandbox Code Playgroud)
你不会比这更快.
MFo*_*ter 56
使用Integer.compare(int, int).除非您能证明自己存在性能问题,否则不要对代码进行微观优化.
小智 6
将int原语包装到Integer对象中会花费你一些内存,但差异只会在非常罕见的(内存需求)情况下显着(具有1000多个元素的数组).我不建议这样使用新的Integer(int a)构造函数.这就足够了:
Integer a = 3;
Run Code Online (Sandbox Code Playgroud)
关于比较,有Math.signum(双d).
compare= (int) Math.signum(a-b);
Run Code Online (Sandbox Code Playgroud)