在Java中返回0
,返回1
和在compareTo()
中返回-1
之间有什么区别?
答案 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)
返回
此方法的实现确定<
>
和==
的实际语义(在java的对象标识运算符意义上,我不是指==
)
"abc".compareTo("def")
将产生小于0的内容,因为abc
按字母顺序排列在def
之前。
Integer.valueOf(2).compareTo(Integer.valueOf(1))
将产生大于0的东西,因为2大于1。
注意:对于实现Comparable的类来说,优雅的做法是在javadocs中声明它的compareTo()方法的语义。
注意:您应至少阅读以下其中一项内容:
警告:您绝不应该依赖compareTo -1
,0
和1
的返回值。您应该始终分别测试x < 0
,x == 0
,x > 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)
简短回答:(搜索你的情况)
答案 3 :(得分:5)
如果我们想要比较“a”和“b”,即(“a”== this)
,请举例说明答案 4 :(得分:3)
它可以用于排序,0表示“相等”而-1表示,1表示“更少”和“更多(更大)”。
任何小于0的返回值意味着左操作数较小,如果值大于0则左操作数较大。
答案 5 :(得分:2)
int x = thisObject.compareTo(anotherObject);
compareTo()
方法返回一个具有以下特征的int:
If thisObject < anotherObject
If thisObject == anotherObject
If thisObject > anotherObject
答案 6 :(得分:0)
System.out.println(A.compareTo(B)> 0?“是”:“否”)
如果A> B的值将返回“是”或“否”。