Comparable.compareTo的返回值在Java中意味着什么?

时间:2010-09-22 07:20:00

标签: java comparable

在Java中返回0,返回1和在compareTo()中返回-1之间有什么区别?

7 个答案:

答案 0 :(得分:82)

官方定义

来自Comparable.compareTo(T)的参考文档:

  

将此对象与。进行比较   订单的指定对象。返回一个   负整数,零或正数   这个对象小于的整数,   等于或大于   指定的对象。

     

实施者必须确保   sgn(x.compareTo(y))==   -sgn(y.compareTo(x))表示所有x和y。 (这意味着x.compareTo(y)必须   抛出异常iff y.compareTo(x)   抛出异常。)

     

实施者还必须确保这一点   这种关系是传递性的:   (x.compareTo(y)> 0& y.compareTo(z)> 0)   暗示x.compareTo(z)> 0。

     

最后,实施者必须确保   x.compareTo(y)== 0意味着   sgn(x.compareTo(z))==   sgn(y.compareTo(z)),适用于所有z。

     

强烈建议,但不是   严格要求   (x.compareTo(y)== 0)==(x.equals(y))。   一般来说,任何一类   实现Comparable接口   并且应该违反这个条件   清楚地表明这一事实。该   推荐的语言是“注意:这个   class有一个自然的顺序   与equals不一致。“

     

在前面的描述中,   符号sgn(表达式)表示   数学符号函数,   被定义为返回-1之一,   0,或1是否值   表达式为负,零或   正。

我的版本

简而言之:

this.compareTo(that)

返回

  • a negative int 如果这个<该
  • 0 如果= =那
  • 积极的如果这是>该

此方法的实现确定< >==的实际语义(在java的对象标识运算符意义上,我不是指==

实施例

"abc".compareTo("def")

将产生小于0的内容,因为abc按字母顺序排列在def之前。

Integer.valueOf(2).compareTo(Integer.valueOf(1))

将产生大于0的东西,因为2大于1。

一些额外的要点

注意:对于实现Comparable的类来说,优雅的做法是在javadocs中声明它的compareTo()方法的语义。

注意:您应至少阅读以下其中一项内容:

警告:您绝不应该依赖compareTo -101的返回值。您应该始终分别测试x < 0x == 0x > 0

答案 1 :(得分:44)

我使用这个助记符:

a.compareTo(b) < 0 // a < b

a.compareTo(b) > 0 // a > b

a.compareTo(b) == 0 // a == b

您保留标志并始终将compareTo()的结果与0

进行比较

答案 2 :(得分:21)

简短回答:(搜索你的情况)

  • 1 .compareTo( 0 )(返回 1
  • 1 .compareTo( 1 )(返回 0
  • 0 .comapreTo( 1 )(返回 -1

答案 3 :(得分:5)

如果我们想要比较“a”和“b”,即(“a”== this)

,请举例说明
  1. 如果a&lt; B'/ LI>
  2. 如果a == b
  3. 如果a>&gt;则为正int B'/ LI>

答案 4 :(得分:3)

它可以用于排序,0表示“相等”而-1表示,1表示“更少”和“更多(更大)”。

任何小于0的返回值意味着左操作数较小,如果值大于0则左操作数较大。

答案 5 :(得分:2)

int x = thisObject.compareTo(anotherObject);

compareTo()方法返回一个具有以下特征的int:

  • 否定If thisObject < anotherObject
  • If thisObject == anotherObject
  • positive If thisObject > anotherObject

答案 6 :(得分:0)

System.out.println(A.compareTo(B)> 0?“是”:“否”)

如果A> B的值将返回“是”或“否”。