目录
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 = 5println("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+person2println("person3=$person3")
}//输出结果
person3=Person(name=A+B, age=7)
4、常用的运算符及对应的函数名
4.1一元运算符
表达式 | 函数名 |
---|---|
+a |
unaryPlus |
-a |
unaryMinus |
!a |
not |
++a, a++ |
inc |
--a, a-- |
dec |
4.2、二元运算符
a + b | a.plus(b) |
a - b | a.minus(b) |
a * b | a.tiems(b) |
a / b | a.div(b) |
a % b | a.rem(b) 或 a.mod(b) |
a .. b | a.rangTo(b) |
4.3、复杂运算符
操作符 | 表示 | 重载 |
---|---|---|
a += b | a = a + b | a = a.plus(b) |
a -= b | a = a - b | a = a.minus(b) |
a *= b | a = a * b | a = a.tiems(b) |
a /= b | a = a / b | a = a.div(b) |
a %= b | a = a % b | a = a.rem(b) |
4.4、比较运算符
表达式 | 函数名 |
---|---|
a == b |
a?.equals(b) ?: (b === null) |
a != b |
!(a?.equals(b) ?: (b === null)) |
a > b |
a.compareTo(b) > 0 |
a < b |
a.compareTo(b) < 0 |
a >= b |
a.compareTo(b) >= 0 |
a <= b |
a.compareTo(b) <= 0 |
5、注意
Kotlin中的 && 、 || 、 ?: 、 === 、 !== 是不能被重载的