Double有Double.compare用于比较两个双基元。为什么Integer没有?
我知道写一些微不足道的代码,但要求好奇心。
编辑:我意识到Integer和Double都有compareTo。但是使用compareTo需要在Integer对象中装入int原语,这会产生相当高的成本。另外,inta> intb与compare(inta,intb)不同,后者返回+1,0或-1,而前者为true / false ....
答案 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或类似的库来提供缺失的部分。