解析equals(Objectobj)和compareTo(Tobj)
背景:最近在研究静态扫描的东西,遇到⼀个规则:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method
然后就想深度扒⼀扒equals和compareTo有什么区别
1.java.lang.Object是所有类的⽗类,java.lang.String类继承了Object类,String类是final类,是不能被继承的,
Object类的成员⽅法equals(Object obj)⽤来⽐较两个对象是否相等:对于任何⾮null的引⽤x和y,当且仅当x和y指向同⼀个对象的时
候,x.equals(y)返回true。
2.java.lang.Comparable是⼀个接⼝,成员⽅法compareTo(T o)是从顺序上来⽐较本对象跟指定的对象,当本对象⼩于指定的对象,返回负整数,当本对象等于指定的对象,返回0,当本对象⼤于指定的对象返回正整数,
实现必须确保对于所有的x和y,sgn(xpareTo(y)) == -sgn(ypareTo(x))(意味着如果ypareTo(x)抛出异常,那么xpareTo(y)也⼀定会抛出异常
实现必须确保关系是可以传递的,xpareTo(y)&&ypareTo(z)>0意味着xpareTo(z)>0
最后实现必须保证xpareTo(y)==0,代表对于所有的z ,sgn(xpareTo(z)) == sgn(ypareTo(z))
强烈推荐但不是严格要求(xpareTo(y)==0) == (x.equals(y)),⼀般地任何实现Comparable接⼝的类如果违法这个规则需要明确地指出来这个问题,更推荐的说法是:这个类有⾃然的顺序跟equals是⼀致的。
在前⾯的描述中,记号sgn(expression)是数学的正负号函数,定义了如果表达式的值是负数,返回-1,表达式的值是0,返回0,表达式的值是整数,返回1
int compareTo( o)
Parameters:
equals不等于o - the object to be compared.
Returns:
a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
Throws:
- if the specified object is null
- if the specified object's type prevents it from being compared to this object.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论