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<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")
p1 < p2//false

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值