運算符的重載是一個十分友善的特性,它讓代碼看起來更加的直覺,寫起來也更加的友善。在學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(,)
val com2=Complex(,)
val result=com1 + com2
println("${com1.toString()}+${com2.toString()}=${result.toString()}")
}
運作結果:
要想擷取更多關于Kotlin的内容,請轉至Kotlin學習網