一、等号运算符:“equals”
- 使用 **
==运算符,它将被转换成equals**方法的调用。 - 使用**
·!=运算符,它也是调用equals**方法
且它们都是可空运算符。
// 等式校验“==”被转换为“equals”函数的调用,以及null的校验
a == b ------> a?.equals(b) ?: (b == null)
注意:**
===**运算符不能被重载“==”和“===”区别:
“==”表示比较值,“===”表示比较两个对象的地址是否相等
注意:
equals不能实现为扩展函数,因为继承自Any类的实现始终优先于扩展函数。
二、排序运算符:compareTo
Kotlin支持相同的Comparable接口。但是接口中定义的**compareTo方法可以按约定调用,比较运算符(<,>,<=,>=)的使用将被转换为compareTo**。
a >= b -----> a.compareTo(b) >= 0
compateTo的返回类型必须为Int。 p1 < p2 表达式等价于p1.compareTo(p2) < 0。
// 定义
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