运算符的重载是一个十分方便的特性,它让代码看起来更加的直观,写起来也更加的方便。在学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)
原文链接:http://www.apkbus.com/blog-822717-72685.html
打开App,阅读手记