compareTo 用基元 -> Integer / int

写的是更好的


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.


你不会比现在更快。

君笑尘

赞同来自:

使用
http://docs.oracle.com/javase/ ... 28int,%20int%29
. 如果您无法证明性能问题,请不要尝试微量优化代码。

董宝中

赞同来自:

我可以提供第三种选择


//Integer/ a/.compareTo/b/

知食

赞同来自:

Integer对象中的INT原始包装将花费您一些内存,但在非常罕见的情况下,差异只会很大/记忆需要/ /塞 1000+ 元素/. 我不会建议使用新的 Integer/int a/ 以这种方式设计师。 这是足够的 :


Integer a = 3;


有一个比较 Math.signum/double d/.


compare= /int/ Math.signum/a-b/;

君笑尘

赞同来自:

为了 pre 1.7 我会说相同的 Integer.compare/x, y/ 是一个:


Integer.valueOf/x/.compareTo/y/;

奔跑吧少年

赞同来自:

他们已经在监狱里。 为什么不使用减法?


compare = a - b;


注意 Integer.compareTo// 不一定只是返回 -1, 0 或者 1.

喜特乐

赞同来自:

如果您正在使用 java 8, 您可以通过此方法创建比较器:


Comparator.comparingInt/i -> i/;


如果要按相反顺序进行比较:


Comparator.comparingInt/i -> -i/;

快网

赞同来自:

如果您只需要逻辑价值 /它几乎总是发生/, 然后你会帮助下一个笔划:


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

要回复问题请先登录注册