在 Java 中,Comparable.compareTo 的返回值是什么意思?
在Java中,在compareTo()
中返回,返回和返回有什么区别?0
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)
返回
其中,此方法的实现决定了 和 的实际语义(我不是说在 java 的对象标识运算符的意义上)<
>
==
==
"abc".compareTo("def")
将生成小于 0 的东西,如 前面的字母顺序所示。abc
def
Integer.valueOf(2).compareTo(Integer.valueOf(1))
将产生大于 0 的东西,因为 2 大于 1。
注意:对于实现Able的类来说,在javadocs中声明其compareTo()方法的语义是很好的做法。
注意:您应至少阅读以下一项:
警告:切勿依赖 compareTo 的返回值 ,和 。应始终分别测试 、 、 。-1
0
1
x < 0
x == 0
x > 0
我用这个助记符:
a.compareTo(b) < 0 // a < b
a.compareTo(b) > 0 // a > b
a.compareTo(b) == 0 // a == b
您保留符号并始终将结果与0进行比较compareTo()