80

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

4

7 回答 7

96

官方定义

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

将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。

实现者必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))。(这意味着如果 y.compareTo(x) 抛出异常,则 x.compareTo(y) 必须抛出异常。)

实现者还必须确保关系是可传递的:(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 接口并违反此条件的类都应该清楚地表明这一事实。推荐的语言是“注意:这个类有一个与equals不一致的自然顺序。”

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

我的版本

简而言之:

this.compareTo(that)

返回

  • 如果 this < that 则为负整数
  • 0如果这 == 那
  • 如果 this > that 则为正整数

该方法的实现决定了< >and的实际语义==(我不是指==java 的对象标识运算符)

例子

"abc".compareTo("def")

将产生小于 0 的东西,就像abc之前的字母顺序一样def

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

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

一些额外的点

注意:实现 Comparable 的类最好在 javadocs 中声明它的 compareTo() 方法的语义。

注意:您应该至少阅读以下内容之一:

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

于 2010-09-22T07:22:01.907 回答
53

我使用这个助记符:

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

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

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

您保留符号并始终将结果compareTo()与 0进行比较

于 2010-09-22T14:55:36.537 回答
33

简而言之:(搜索您的情况)

  • 1 .compareTo( 0 )(返回1
  • 1 .compareTo( 1 )(返回0
  • 0 .comapreTo( 1 )(返回-1
于 2016-09-26T05:52:30.753 回答
5

举个例子,如果我们想比较“a”和“b”,即(“a” == this)

  1. 如果 a < b 则为负整数
  2. 如果 a == b
  3. 如果 a > b 则为正整数
于 2013-04-08T06:08:19.510 回答
3

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

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

于 2010-09-22T07:23:54.250 回答
2
int x = thisObject.compareTo(anotherObject);

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

  • 消极的If thisObject < anotherObject
  • If thisObject == anotherObject
  • 积极的If thisObject > anotherObject
于 2014-11-17T16:51:28.223 回答
0

System.out.println(A.compareTo(B)>0?"Yes":"No")

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

于 2020-08-28T14:17:37.603 回答