Kotlin-14-运算符重载(operator)

目录

1、定义

2、原理

3、作用

4、常用的运算符及对应的函数名

4.1一元运算符

4.2、二元运算符

4.3、复杂运算符

4.4、比较运算符

5、注意


1、定义

运算符重载就是对已有的运算符赋予他们新的含义。重载的修饰符是operator

比如我们的+号,它的含义是两个数值相加:1+1=2。+ 号对应的函数名是plus

然后对+号这个函数进行重载,可以让它可以实现减法的效果。

这里我们实现了一个Person数据类,然后重载了Int的 + 号运算符,让一个Int对象可以直接和Person对象相加。返回的结果是这个Int对象减去Person对象的age的值所返回的的Int值。

data class Person(var name: String, var age: Int)

operator fun Int.plus(b: Person): Int {
    return this - b.age
}

fun main() {

    val person1 = Person("A", 3)

    val testInt = 5

    println("testInt+person1=${testInt +person1}")
}
//输出结果
testInt+person1=2


2、原理

运算符重载实际上是函数重载,本质上是对运算符函数的调用,从运算符到对应函数的映射过程由编译器完成。

3、作用

给我们的类提供一些自己定义的操作运算符。

比如:我们定义了Person的数据类,然后我们重载+号运算符,让我们的Person对象可以直接调用+号来做一些函数操作。

这里我们重载了plus()函数,也就是+号,然后让它实现了两个Person相加的时候,让他们的name和age互相相加,然后返回一个新的Person对象。

data class Person(var name: String, var age: Int){
    operator fun plus(other:Person):Person{
         return Person(this.name+"+"+other.name,this.age+other.age)
    }
}
fun main() {

    var person1=Person("A",3)
    var person2=Person("B",4)
    var person3=person1+person2
    println("person3=$person3")
}

//输出结果
person3=Person(name=A+B, age=7)

4、常用的运算符及对应的函数名

4.1一元运算符

表达式函数名
+aunaryPlus
-aunaryMinus
!anot
++a, a++inc
--a, a--dec

4.2、二元运算符

a + ba.plus(b)
a - ba.minus(b)
a * ba.tiems(b)
a / ba.div(b)
a % ba.rem(b) 或 a.mod(b)
a .. ba.rangTo(b)

4.3、复杂运算符

操作符表示重载
a += ba = a + ba = a.plus(b)
a -= ba = a - ba = a.minus(b)
a *= ba = a * ba = a.tiems(b)
a /= ba = a / ba = a.div(b)
a %= ba = a % ba = a.rem(b)

4.4、比较运算符

表达式函数名
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: (b === null))
a > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.compareTo(b) <= 0

5、注意

Kotlin中的 && 、 || 、 ?: 、 === 、 !== 是不能被重载的

 

 

 

 

 

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值