可比較和比較

在實現依賴於 doublecompareTo(..) 方法時,請不要執行以下操作:

public int comareTo(MyClass other) {
    return (int)(doubleField - other.doubleField); //THIS IS BAD
}

(int) 強制轉換引起的截斷將導致該方法有時錯誤地返回 0 而不是正數或負數,因此可能導致比較和排序錯誤。

相反,最簡單的正確實現是使用 Double.compare ,如下:

public int comareTo(MyClass other) {
    return Double.compare(doubleField,other.doubleField); //THIS IS GOOD
} 

自 Java 1.2 以來Comparable<T> 的非通用版本,簡稱 Comparable 。除了與遺留程式碼介面之外,實現通用版本 Comparable<T> 總是更好,因為它不需要在比較時進行轉換。

一個類與其自身相當是非常標準的,如:

public class A implements Comparable<A>

雖然有可能打破這種正規化,但在這樣做時要謹慎。

如果該類實現了 Comparable<T>,那麼仍然可以在類的例項上使用 Comparator<T>。在這種情況下,將使用 Comparator 的邏輯; Comparable 實現指定的自然順序將被忽略。