运算符的重载是一个十分方便的特性,它让代码看起来更加的直观,写起来也更加的方便。在学C++的时候就十分喜欢这一语言特性。然而Java却对这一点没有任何的支持。现在同样作为JVM语言的Kotlin加入了运算符重载这一语言特性。接下来让我们看看,在Kotlin中究竟有哪些运算符可以重载呢?
一元运算符
表达式 | 对应的函数 | 说明 |
---|
+a | a.unaryPlus() | |
-a | a.unaryMinus() | 取反 |
!a | a.not() | 非运算 |
自加、自减
表达式 | 对应的函数 | 说明 |
---|
a++ | a.inc() | 自增 |
a– | a.dec() | 自减 |
二元运算符
表达式 | 对应的函数 | 说明 |
---|
a + b | a.plus(b) | 加 |
a - b | a.minus(b) | 减 |
a * b | a.times(b) | 乘 |
a / b | a.div(b) | 除 |
a % b | a.rem(b), a.mod(b) (弃用) | 取模 |
a..b | a.rangeTo(b) | 从a到b的区间 |
in运算符
表达式 | 对应的函数 | 说明 |
---|
a in b | b.contains(a) | b包含a |
a !in b | !b.contains(a) | b不包含a |
下标访问
表达式 | 对应的函数 | 说明 |
---|
a[i] | a.get(i) | 获取位置i的值 |
a[i, j] | a.get(i, j) | 获取位置 i 和 j 的值 |
a[i_1, …, i_n] | a.get(i_1, …, i_n) | 获取 i_1到i_n的值 |
a[i] = b | a.set(i, b) | 将位置 i 的值设置为 b |
a[i, j] = b | a.set(i, j, b) | 将位置 i 和 j 的值设置为 b |
a[i_1, …, i_n] = b | a.set(i_1, …, i_n, b) | 将 i_1到i_n 的值设为b |
调用(invoke)
表达式 | 对应的函数 | 说明 |
---|
a() | a.invoke() | 无参调用 |
a(i) | a.invoke(i) | 带一个参数的调用 |
a(i, j) | a.invoke(i, j) | 带两个参数的调用 |
a(i_1, …, i_n) | a.invoke(i_1, …, i_n) | 带n个参数的调用 |
增量运算
表达式 | 对应的函数 | 说明 |
---|
a += b | a.plusAssign(b) | |
a -= b | a.minusAssign(b) | |
a *= b | a.timesAssign(b) | |
a /= b | a.divAssign(b) | |
a %= b | a.remAssign(b), a.modAssign(b) (弃用) | |
相等运算
表达式 | 对应的函数 | 说明 |
---|
a == b | a?.equals(b) ?: (b === null) | |
a != b | !(a?.equals(b) ?: (b === null)) | |
比较运算
表达式 | 对应的函数 | 说明 |
---|
a > b | a.compareTo(b) > 0 | a大于b |
a < b | a.compareTo(b) < 0 | a 小于b |
a >= b | a.compareTo(b) >= 0 | a大于等于b |
a <= b | a.compareTo(b) <= 0 | a小于等于b |
使用实例
class Complex(val real:Int,val virtual:Int){
operator fun plus(complex: Complex)=Complex(this.real+complex.real,
this.virtual+complex.virtual)
override fun toString(): String {
return "($real,$virtual)"
}
}
fun main(args: Array<String>) {
val com1=Complex(12,10)
val com2=Complex(10,21)
val result=com1 + com2
println("${com1.toString()}+${com2.toString()}=${result.toString()}")
}
运行结果:
(12,10)+(10,21)=(22,31)
要想获取更多关于Kotlin的内容,请转至Kotlin学习网