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

为什么Java';s Integer类没有compare()方法?,java,Java,Double具有Double.compare用于比较两个双原语。为什么整数没有一个呢 我知道写代码的数量很小,但是出于好奇而问 编辑:我意识到整数和双精度都有比较。但是使用compareTo需要将int原语装箱到整数对象中,这需要相当高的成本。此外,inta>intb与compare(inta,intb)不同,后者返回+1、0或-1,而前者为真/假….浮点值不一定要进行二进制比较,因为浮点表示法不精确,因此需要使用compare()运算符来比较两个浮点值,基本上确保它们之间的差异不大于(小)误差

Double具有Double.compare用于比较两个双原语。为什么整数没有一个呢

我知道写代码的数量很小,但是出于好奇而问


编辑:我意识到整数和双精度都有比较。但是使用compareTo需要将int原语装箱到整数对象中,这需要相当高的成本。此外,inta>intb与compare(inta,intb)不同,后者返回+1、0或-1,而前者为真/假….

浮点值不一定要进行二进制比较,因为浮点表示法不精确,因此需要使用compare()运算符来比较两个浮点值,基本上确保它们之间的差异不大于(小)误差值。整数可以进行二进制比较,因此可以使用相等运算符。

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

有关详细信息,请参阅


无论哪种方式,从Java7开始,您也将有这样一种ints方法

这可能是因为
compare
操作相对简单(但仍有许多人弄错了)。与双倍相比,它确实是

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

in
Double
具有与以下相同的效果:

new Double(d1).compareTo(new Double(d2))
这意味着它考虑了
NaN
+0
-0
(引用文档进行
比较()
):

  • 此方法认为Double.NaN等于自身和 大于所有其他双精度值(包括 双精度。正无穷大)
  • 此方法认为0.0d大于-0.0d

由于Integer没有
NaN
,而且
+0
-0
都将被视为仅
0
,因此这种方法在功能上并不真正需要。

Java 7将解决这一疏忽

公共静态整数比较(整数x, int(y)

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

Integer.valueOf(x).compareTo(Integer.valueOf(y))
参数: x-要比较的第一个int y—要比较的第二个int 返回: 如果x==y,则值为0;如果xy,则值大于0 自:
1.7

。它没有
compare(inta,intb)
方法,但是您可以使用:
newinteger(a)。compareTo(b)
@ty1824需要将原语装箱到一个对象中……我理解。另外,从您的编辑中,您需要从这个答案中得到什么?您需要+1、0或-1吗?你只需要+N、0或-N就可以了吗?如果是这样的话,您可以简单地从前一个整数中减去第二个整数<代码>整数结果=第一-第二result/=Math.abs(result)装箱没有“相当高的成本”+1但请记住,等式运算必须使用
int
,而不是
Integer
来完成。您可以将浮点值与简单的
进行比较。我认为这可能是实际提供正确信息的唯一答案。是的,不是开玩笑。我很惊讶有多少人盲目地相信,
Double.compare
会处理浮点不精确的问题。我不会说这是疏忽,更应该说是故意遗漏,因为与浮点数字相比,整数微不足道。他们可能刚刚重新思考了7年,但是的,它包含在其中!这可能是微不足道的,但老实说,我总是忘记哪个应该是1,哪个应该是-1。这并不是说我要花很长时间才能记住,但在我看来,仅仅因为它微不足道,就把它放在10亿个地方的想法是一个糟糕的决定。