Kotlin 中的運算符

根據與 Java 中運算符的區別,Kotlin 中的運算符能夠分爲四類:java

  1. 與 Java 中徹底相同的,如加減乘除等基本數學運算等;編程

  2. Java 中有,可是用途不一樣的,好比冒號;數組

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

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

1. 操做符重載的概念

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

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

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

全部的 Kotlin 操做符都是經過特定名稱的函數重載實現的,具體的重載方法咱們會結合具體的操做符講解。orm

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 的整數
相關文章
相關標籤/搜索