在 Java 中,Comparable.compareTo 的返回值是什么意思?

2022-08-31 12:21:52

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


答案 1

官方定义

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

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

实现者必须确保所有 x 和 y 的 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))(这意味着 x.compareTo(y) 必须引发异常 iff y.compareTo(x) 引发异常。

实现者还必须确保关系是可传递的:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0。

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

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

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

我的版本

总之:

this.compareTo(that)

返回

  • 一个负整数,如果这<那个
  • 0 如果 this == that
  • 一个正整数,如果这>

其中,此方法的实现决定了 和 的实际语义(我不是说在 java 的对象标识运算符的意义上)<>====

例子

"abc".compareTo("def")

将生成小于 0 的东西,如 前面的字母顺序所示。abcdef

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

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

一些额外的要点

注意:对于实现Able的类来说,在javadocs中声明其compareTo()方法的语义是很好的做法。

注意:您应至少阅读以下一项:

警告:切勿依赖 compareTo 的返回值 ,和 。应始终分别测试 、 、 。-101x < 0x == 0x > 0


答案 2

我用这个助记符:

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

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

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

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


推荐