Kotlin 中的運算符

根據與 Java 中運算符的區別,Kotlin 中的運算符可以分爲四類:

  1. 與 Java 中完全相同的,如加減乘除等基本數學運算等;

  2. Java 中有,但是用途不同的,比如冒號;

  3. Java 中有而 Kotlin 中沒有的,重點 ;

  4. Java 中沒有而 Kotlin 中有的,重點

1. 操作符重載的概念

什麼是操作符重載?讓我們回想一下 Java 學習時涉及到的 多態 概念,對於一個對象,我們並不在乎它是什麼類型,只關注特定的行爲,讓程序在執行的時候根據對象的實際類型執行具體的實現方法,這就是多態,它讓我們擺脫了類型的束縛,做到面向 行爲 編程。

理解了多態的概念,就能理解操作符重載。舉個例子,同樣是一個 + 號,用在兩個數字之間表示加法,用在字符串之間則表示將它們連接成一個新字符串,編譯器怎麼將同一個加號識別爲不同的行爲呢?我們可以讓這些數據類型使用名稱相同的函數 重載 + 號這個運算符,編譯器在遇到 + 號時會自動把它理解爲執行這個函數,然後根據不同的數據類型執行不同的操作。

對於 Kotlin 來說,所有重載了運算符的函數都要用 operator 關鍵字標記。比如,Kotlin 中規定 + 號應該重載爲 plus() 函數,所有基礎類型都重載這個函數,執行 a + b 實際就是執行 a.plus(b),對於 Int.plus() 函數,它執行的就是加法,對於 String.plus() 函數,它執行的就是字符串連接。

所有的 Kotlin 操作符都是通過特定名稱的函數重載實現的,具體的重載方法我們會結合具體的操作符講解。

2. Kotlin 中與 Java 完全相同的運算符

這一部分我們就簡單給出運算符與重載函數吧:

v2-0ea552dcce088afebd4a967474478180_b.pn

3. Kotlin中與 Java 使用有差異的運算符

主要是兩個:== / != 和 []

  1. == 和 !=

    我們先看一下這兩個運算符的重載:
    v2-6d50b3ed393cc31f059b9d7808831454_b.pn

    a?.equals(b) ?: (b===null) 這個表達式,用 Java 寫出來是這樣的:

    if(a != null){
      return a.equals(b);}else{
      return b == null;}

    可以看到,它實際上調用的是 equals 方法來比較兩個元素是否 對象相等,而不是 Java 中的比較 引用相同

    如果需要比較兩個對象的引用是否相同,可以使用 === 和 !== 操作符,它們與 Java 中的== 和 != 是一樣的。

  2. []

    這個運算符的重載:
    v2-bd53a6f478fcdbf721933ce87ba54db9_b.pn

    與 Java 中的不同之處在於,Kotlin 中這個運算符不僅可以用在 數組 變量後,也可以用在集合 變量後,可以方便地 調用和操作 數組和集合中的元素。

4. Java 中有而 Kotlin 中沒有的運算符

與 Java 相比,Kotlin 拋棄了類 C 風格的 位運算符,只是定義了幾個函數:

v2-4c76a60fe19468245f2000d2a2f4a214_b.pn

對於 <<=、>>=、>>>= 這三個賦值操作符,Kotlin 中沒有與之對應的函數。

中綴表示法 是 Kotlin 定義的一種特殊的函數調用方式,標記爲 infix ,並且只有一個參數的擴展函數或成員函數,可以使用這種表示方法。

5. Java 中沒有而 Kotlin 中有的運算符

  1. is 和 !is

    這兩個運算符相當於 Java 中的 instanceof 運算符,用於檢查對象是否是某個類的實例。

  2. in 和 !in

    a in b 重載爲 b.contains(a),用於檢查 a 是否是 b 內的元素,這裏的 b 可以是數組、集合和區間。這個運算符還可以用在 for 循環中,用來遍歷 b 中的元素:

    val b = arrayOf(1, 2, 3)for(a in b) println(a)
  3. ..

    a .. b 重載爲 a.rangeTo(b),返回一個從 a 到 b 的 區間,a 和 b 這兩個邊界也包含在內。這裏的 a 和 b 要求都是整數,而且 a <= b。

    使用區間控制循環次數,要比 Java 和 C 中的方法更加方便清晰:

    for(i in 1..10) println(i) //輸出從 1 到 10 的整數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章