1. 程式人生 > >Kotlin運算子過載總結

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(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學習網