326,Kotlin-运算符重载(operator)

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一元运算符

表达式 函数名


截屏2020-10-17 上午9.21.44.png

4.2、二元运算符

截屏2020-10-17 上午9.21.51.png

4.3、复杂运算符

截屏2020-10-17 上午9.22.00.png

4.4、比较运算符

截屏2020-10-17 上午9.22.07.png

5、注意

截屏2020-10-17 上午9.22.14.png

你可能感兴趣的:(326,Kotlin-运算符重载(operator))