为什么Java Integer类没有compare()方法?

时间:2011-08-02 18:53:14

标签: java

Double有Double.compare用于比较两个双基元。为什么Integer没有?

我知道写一些微不足道的代码,但要求好奇心。

编辑:我意识到Integer和Double都有compareTo。但是使用compareTo需要在Integer对象中装入int原语,这会产生相当高的成本。另外,inta> intb与compare(inta,intb)不同,后者返回+1,0或-1,而前者为true / false ....

5 个答案:

答案 0 :(得分:18)

这是Java 7将解决的疏忽

http://download.oracle.com/javase/7/docs/api/java/lang/Integer.html#compare%28int,%20int%29

public static int compare(int x,           int y)

以数字方式比较两个int值。返回的值与以下内容相同:

Integer.valueOf(x).compareTo(Integer.valueOf(y))

参数:     x - 要比较的第一个int     y - 要比较的第二个int 返回:     如果x == y,则值为0;如果x <1,则小于0的值。 Ÿ;如果x> 1,则值大于0 ÿ 以来:     1.7

答案 1 :(得分:6)

Double中的compare与以下内容具有相同的效果:

new Double(d1).compareTo(new Double(d2))

这意味着需要考虑NaN+0-0(引用compareTo()的文档):

  
      
  • 此方法认为Double.NaN等于自身和   大于所有其他双重值(包括   Double.POSITIVE_INFINITY)。
  •   通过该方法认为
  • 0.0d大于-0.0d。
  •   

由于Integer没有NaN,并且+0-0都将被视为0,因此功能并不需要这样的方法。

答案 2 :(得分:4)

以这种方式比较整数是微不足道的,比较双精度实际上要比最初看起来复杂得多。你必须处理诸如错误值之类的事情,以及不太明显的情况,例如NaN。

有关详细信息,请参阅this question

无论哪种方式,从Java 7开始,你也会有这样的方法用于整理!

答案 3 :(得分:2)

浮点值不一定要进行二元比较,因为浮点表示不精确,因此需要比较()运算符来比较两个浮点值,从而确保它们之间的差值不大于a (小)错误值。可以对整数进行二元比较,因此可以使用相等运算符。

答案 4 :(得分:0)

这可能是因为compare操作相对简单(但仍有很多人弄错了)。与double相比,确实如此。

我也希望内置此方法,这使得其他人编写更简单的代码。但只要Oracle不认为这是一个问题,我们就必须依靠Google的Guava或类似的库来提供缺失的部分。