解析equals(Object obj)和compareTo(T obj)


背景:最近在研究靜態掃描的東西,遇到一個規則:"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(x.compareTo(y)) == -sgn(y.compareTo(x)) (意味着如果y.compareTo(x)拋出異常,那么x.compareTo(y)也一定會拋出異常

實現必須確保關系是可以傳遞的,x.compareTo(y)&&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)),一般地任何實現Comparable接口的類如果違法這個規則需要明確地指出來這個問題,更推薦的說法是:這個類有自然的順序跟equals是一致的。

在前面的描述中,記號sgn(expression)是數學的正負號函數,定義了如果表達式的值是負數,返回-1,表達式的值是0,返回0,表達式的值是整數,返回1

int compareTo(T o)

Parameters:

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:
NullPointerException - if the specified object is null
ClassCastException - if the specified object's type prevents it from being compared to this object.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM