Kotlin進階知識(二)——重載比較運算符

1、等號運算符:「equals」

  • 使用 **==運算符,它將被轉換成equals**方法的調用。
  • 使用**·!=運算符,它也是調用equals**方法

且它們都是可空運算符。markdown

// 等式校驗「==」被轉換爲「equals」函數的調用,以及null的校驗
a == b  ------>  a?.equals(b) ?: (b == null)
複製代碼

注意:**===**運算符不能被重載ide

「==」和「===」區別「==」表示比較值,「===」表示比較兩個對象的地址是否相等函數

注意equals不能實現爲擴展函數,由於繼承Any類的實現始終優先於擴展函數測試

2、排序運算符:compareTo

Kotlin支持相同的Comparable接口。可是接口中定義的**compareTo方法能夠按約定調用,比較運算符(<,>,<=,>=)的使用將被轉換爲compareTo**。ui

a >= b    ----->    a.compareTo(b) >= 0
複製代碼

compateTo的返回類型必須爲Int。 p1 < p2 表達式等價於p1.compareTo(p2) < 0this

// 定義
class Person(
        val firstName: String, val lastName: String
): Comparable<Person>{
    override fun compareTo(other: Person): Int {
        // 按順序調用給定的方法,並比較它們的值
        return compareValuesBy(this, other,
                Person::lastName, Person::firstName)
    }
}

// 測試
>>> val p1 = Person("Alice", "Smith")
>>> val p2 = Person("Bob", "Johnson")
>>> println(p1 < p2)
false
複製代碼
相關文章
相關標籤/搜索