Kotlin重载比较运算符

Kotlin重载比较运算符

1.等号运算符:equals

    在Kotlin中使用==运算符,它将被转换成equals方法调用。区别在于==和!=可用于可空运算数,这些运算符会先检查运算数是否为null,如果为null只有两个运算数都为null才会返回true,不为null则调用equals方法。

1.1实现equals函数

    class Point(val x: Int, val y: Int) {
        override fun equals(other: Any?): Boolean {
            if (other == this) return true
            if (other !is Point) return false
            return other.x == x && other.y == y
        }
    }

测试

Point(10,20)==Point(10,20)//true
Point(10,20)==Point(5,5)//false

    这里使用了恒运算符===来检查参数与调用equals的对象是否相同,恒运算符和java的==运算符一样:检查两个参数是否是同一个对象的引用(基础参数则检查值是否相同),equals不能实现为拓展函数,因为继承自Any类的实现始终优先于拓展函数。

2.排序运算符:compareTo

    Kotlin中支持比较运算符(<,>,<=和>=)的使用转换为compareTo,不像java只有基本数据类型合可以使用。

2.1实现compareTo

    class Person(val firstName: String, val lastName: String) : Comparable {
        override fun compareTo(other: Person): Int {
            return compareValuesBy(this, other, Person::lastName, Person::firstName)
        }
    }

测试

val p1 = Person("Alice", "smith")
val p2 = Person("Bob", "johnson")
p1 < p2//false

    这种情况下,可以实现Comparable接口,这样Person对象不仅可以在Kotlin代码中用来比较,还可以被Java函数进行比较(如集合排序功能)。compareValuesBy函数是Kotlin标准库中简洁实现compareTo方法。

    所有Java中实现了Comparable接口的类,都可以在Kotlin中使用简洁的运算符语法,不用增加拓展函数。

你可能感兴趣的:(kotlin,andriod开发)