天天看點

Kotlin運算符重載總結

運算符的重載是一個十分友善的特性,它讓代碼看起來更加的直覺,寫起來也更加的友善。在學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學習網