Kotlin—基本語法 (四)

本章主講Kotlin的運算符

此外這系列博客還不完善,請等待我完善好。當你發現這行字沒有了,就是穩定了,謝謝。

一、運算符

1. 算術運算符

1.1 一元運算符

一元運算符一共三個,-、++ 、--。

fun main(args: Array<String>) {
    var int = 1
    val a = int++
    val b = ++int
    println(-1)
    println(a)
    println(b)
}

結果:

-1  (取反符)
1   (先賦值再運算,所以1沒有問題)
3   (先運算再賦值,3沒有問題)

1.2 二元運算符

二元運算符,比較簡單,就是一些數學基本運算,它需要對基本數據類型使用。

+(加)、-(減)、*(撐)、/)(除)和%(取餘數)

栗子:

fun main(args: Array<String>) {
    var int = 10

    val add = int + 1
    val minus = int - 1
    val multiply = int * 1
    val divide = int / 1
    val `%` = int % 5

    println(add)
    println(minus)
    println(multiply)
    println(divide)
    println(`%`)
}

結果:

11
9
10
10
0

1.3 算術賦值運算符

就是+=、-=、*=、/=和%=,這個你要試試就行了

栗子:

fun main(args: Array<String>) {
    val int = 10
    var a = 100
    a += int
    println(a)
    a -= int
    println(a)
    a *= int
    println(a)
    a /= int
    println(a)
    a %= int
    println(a)

}

結果:

110
100
1000
100
0

簡單例子說明就是a+=int ==a=a+int

 使用方式很簡單,但是不能給沒有初始化的值使用。

fun main(args: Array<String>) {
    val int = 10
    var a += int  //a沒有初始化報錯
    
}

2. 關係運算符

關係運算符是比較兩個表達式大小的的運算符,結果爲布爾類型。

<、>、== 、 ===、 !=、 !==、 <= 、>= 這8種,我先把簡單演示一下,再講複雜的。

栗子:簡單實例

fun main(args: Array<String>) {
    val a = 1
    
    println(a > 0)  //a大於0
    println(a < 0)  //a小於0
    println(a <= 1)  //a小於等於0
    println(a >= 0)  //a小於等於0

}

true   
false
true
true

很簡單吧!

下面來看==、!=、===、!==

==就是比較它們值,===比較的是引用。==就是Java中的equals方法,===就是Java中的==,它比較的是地址值。

同樣先簡單的例子:來說明==和!=的區別

fun main(args: Array<String>) {
    val a = 1
    val b = 1

    println(a == b)   //就是值判斷是否相等
    println(a != b)   //取反

}

true    
false   兩個值相等,然後就取反。(就是和正確結果相反)

再來看===和!==的區別

fun main(args: Array<String>) {
    val a = 1
    val b = 1

    println(a === b)
    println(a !== b)

}

結果相同。因爲在比較基本類型的時候,比較的是值。
true
false

現在看引用類型

先寫個人的類

class Person(val name: String, val age: Int) {
    
}

測試:

fun main(args: Array<String>) {
    val person1 = Person("王", 11)
    val person2 = Person("王", 11)

    println(person1 == person2)
    println(person1 != person2)

}

結果:

false   因爲比較的是引用類型。Any.equals() 函數比較的是兩個對象的引用是否相等。也就是說,如果沒有覆蓋 equals() 函數,== 與 === 的結果是相同的。如果某個類有比較屬性是否相等的需求,需要自行覆蓋 equals() 方法。  來自歡顏 的博客


true   

那我們重寫Person類的equals方法,試試

class Person(val name: String, val age: Int) {
    override fun equals(other: Any?): Boolean {
        if (name == "王" || age == 11) {
            return true
        }
        return false
    }
}

true
false

好的,驗證成功,接下看===表現

===是比較的地址值,還是上面的例子,Person類不變。

fun main(args: Array<String>) {
    val person1 = Person("王", 11)
    val person2 = Person("王", 11)

    println(person1 === person2)
    println(person1 !== person2)

}

結果

false   不是一個對象,地址值肯定不同
true

再看

fun main(args: Array<String>) {
    val person1 = Person("王", 11)
    val person2 = Person("王", 11)
    val person3 = person1
    println(person1 === person3)
    println(person1 !== person3)

}

結果:

true   
false

我們把重寫的equals方法刪除了

3.其它運算符

Kotlin 支持以下操作符和特殊符號:

+、 -、 *、 /、 % —— 數學操作符

* 也用於將數組傳遞給 vararg 參數

=

賦值操作符

也用於指定參數的默認值

+=、 -=、 *=、 /=、 %= —— 廣義賦值操作符

++、 -- —— 遞增與遞減操作符

&&、 ||、 ! —— 邏輯“與”、“或”、“非”操作符(對於位運算,請使用相應的中綴函數

==、 != —— 相等操作符(對於非原生類型會翻譯爲調用 equals()

===、 !== —— 引用相等操作符

<、 >、 <=、 >= —— 比較操作符(對於非原生類型會翻譯爲調用 compareTo()

[、 ] —— 索引訪問操作符(會翻譯爲調用 get 與 set

!! 斷言一個表達式非空

?. 執行安全調用(如果接收者非空,就調用一個方法或訪問一個屬性)

?: 如果左側的值爲空,就取右側的值(elvis 操作符

:: 創建一個成員引用或者一個類引用

.. 創建一個區間

: 分隔聲明中的名稱與類型

? 將類型標記爲可空

->

分隔 lambda 表達式的參數與主體

分隔在函數類型中的參數類型與返回類型聲明

分隔 when 表達式分支的條件與代碼體

@

引入一個註解

引入或引用一個循環標籤

引入或引用一個 lambda 表達式標籤

引用一個來自外部作用域的 “this”表達式

引用一個外部超類

; 分隔位於同一行的多個語句

$ 在字符串模版中引用變量或者表達式

_

在 lambda 表達式中代替未使用的參數

解構聲明中代替未使用的參數

                                                                                                  -----------------------來自官網

4.運算符優先級

                                                                                                                                             -----------來自Kotlin從小白到大牛

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