在Java中返回0
、返回1
和返回有什么区别?-1
compareTo()
7 回答
官方定义
从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() 方法的语义。
注意:您应该至少阅读以下内容之一:
- Sun Java 教程中 Collection Trail的对象排序部分
- Joshua Bloch 撰写的Effective Java,尤其是第 12 项: 考虑实现 Comparable
- Maurice Naftalin、Philip Wadler 撰写的Java 泛型和集合,第 3.1 章:可比较
警告:你不应该依赖 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
您保留符号并始终将结果compareTo()
与 0进行比较
简而言之:(搜索您的情况)
- 1 .compareTo( 0 )(返回:1)
- 1 .compareTo( 1 )(返回:0)
- 0 .comapreTo( 1 )(返回:-1)
举个例子,如果我们想比较“a”和“b”,即(“a” == this)
- 如果 a < b 则为负整数
- 如果 a == b
- 如果 a > b 则为正整数
可用于排序,0 表示“相等”而-1,1 表示“更少”和“更多(更大)”。
任何小于 0 的返回值都意味着左操作数更小,如果值大于 0,则左操作数更大。
int x = thisObject.compareTo(anotherObject);
该compareTo()
方法返回一个具有以下特征的 int:
- 消极的
If thisObject < anotherObject
- 零
If thisObject == anotherObject
- 积极的
If thisObject > anotherObject
System.out.println(A.compareTo(B)>0?"Yes":"No")
如果 A>B 的值将返回“是”或“否”。