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
复制代码
相关文章
相关标签/搜索