Kotlin 基本數據類型及運算符

Kotlin 的基本數值類型包括 Byte、Short、Int、Long、Float、Double 等等;這裏要注意,字符不屬於數值類型,是一個獨立的數據類型;

    val intNum = 1000  // Int
    val intNum1 = 0b11  // Int 二進制類型,值爲 3
    val intNum2 = 0xFF  // Int 十六進制類型,值爲 255
    val longNum = 1000002L  // Long
    val doubleNum = 135.2  // Double
    val floatNum = 111.2f  // Float

Kotlin 中對於裝箱的類型數據,比如說 Int 數據,如果超過128的話,比較兩個數的值使用 == ,如果要比較對象地址值的話就是用 === ;同時,對象比較時,我們經常會重寫 equals() 方法,在這裏, == 和 equals() 可以理解爲是相等的。   

    fun test(){
        val x : Int = 150
        println(x === x)

        val X: Int? = x
        val XX: Int? = x
        println(X === XX)
        println(X == XX)
    }

打印結果爲

true
false
true

我們定義對象時,比如定義一個常量 Int 的值,可以有以下方式

    fun test1(){
        var i = 5
        var x : Int  = 5
        var y: Int? = null
        y = 5
        var z: Int?
        z = 5

        println("$i   $x   $y   $z")
    }

這四種寫法都行,第一種是用了類型推導;第二種是明確定義了類型;第三種是初始值爲null,延遲賦值;第四種是第三種的簡寫;在這裏要注意,下面有個反例 var j = null  ,這樣寫編譯器沒報錯,但是下一步沒法寫了,比如說想給 j 賦值 Int 或 String 類型,由於一開始沒有指定類型就置空,所以編譯器也不知道它是什麼類型,無法推導,然後就沒然後了,切記,這是個反例。

Java 中對於數據類型,可以直接轉換,比如說 byte a = 78;int b = a; 但在 Kotlin 中這種寫法是違規的,轉換時會報錯,怎麼辦?基本數據類型對應的有  toByte() 、toInt()、toLong()、toString() 等方法可以使用,Kotlin 中也支持數據相加時,小類型自動轉換爲大類型

    // Java
    byte a = 78;
    int b = a;

    // Kotlin
    val a: Byte = 1
    val b: Int = a // 錯誤
    val c: Int = a.toInt() // 正確

    val z = 1000L + 3 // Long + Int 結果z是  Long 類型

Kotlin 中的位操作符與Java的也有點不太一樣,看下面對比

Kotlin        Java
shl     –     <<         左移位
shr     –     >>         右移位
and     –     &          與
or      –     |          或
xor     –     ^          異或

以上就是常用的操作符,記熟就行。


Java 中的 char 類型數據,直接定義即可 char i = 3; 但在 Kotlin 中不能這樣,需要 var j : Char = '3' ;比如說用 char 減去 int 的數字,在Java中可以直接相減,會得到想要的值;但 Kotlin 中則不行,需要先轉換爲Int類型

// Java:
    private void testChar(){
        char i = '3';
        int j = 1;
        System.out.println(i - j); // 值爲 50
    }

// Kotlin;
    fun test2() {
        val i: Char = '3'
        val j: Int = 1
        println(i - j) // 值爲 2,錯誤
        println(i.toInt() - j) // 值爲 50,正確
    }

kotlin 中的邏輯判斷符 || 、&& 、 ! 這三個和 java 中都一樣,用法也一樣,這裏就不多說了。

關於數組,有兩種寫法,一種是用 arrayOf() ,另一種是用工廠方式;對於 Int 類型的,還可以使用特定的數組

    fun test3() {
        val a = arrayOf(1, 2, 3)    //[1,2,3]
        
        val b = Array(3) { i -> (i * 2) }  //[0,2,4]
        
        val c = intArrayOf(1, 2, 3)   //[1,2,3]
    }

Kotlin 中的字符串,也有一些特殊的技能,比如說字符串換行,java中的 String s = "abc  def   ghj"; 字符窗s,如果從空格中換行,中間會用+號鏈接起來;kotlin 中則是支持用 """  來包裹字符串,換行用 | 來標識,結尾追加 trimMargin() 方法

Java:
String s = "abc  def   ghj";
String s = "abc " +
        " def  " +
        " ghj";

Kotlin:
val s   = """ abc  def   ghj """
val s   = """ abc
    |def
    |ghj """.trimMargin()

Kotlin 中的比較符也比較個性,比着java多了種用法,可以直接把if語句中返回的值賦給初始化的值

    fun test4() {
        val a = 1
        val b = 2
    
        var x : Int = a
        if (a < b) {
            x = b
        }
    
        var y: Int
        if (a > b) {
            y = a
        } else {
            y = b
        }
    
        val z = if (a > b) {
            a
        } else {
            b
        }
    
        println("$x   $y   $z ")
    }

in 這個關鍵字,在for循環中使用過,同時也可以用在if判斷語句中,比如

    fun test5() {
        val i = 5
        if(i in 1..9){
            println("$i is in 1-9")
        } else {
            println("$i is not in 1-9")
        }
    }


打印出來的值是 5 is in 1-9 ,說明 i 是在 1-9 的範圍內。同時,還有個 when 的關鍵字,類似於 java 中的 switch 關鍵字,

    fun test6() {
        val i = 5
        when (i) {
            1 -> print("i == 1")
            2 -> print("i == 2")
            in 6..9 -> print("i 在6和9的中間")
            else -> {
                print("i 不是 1 ,也不是 2")
            }
        }
    }

這裏可以強調一點,如果 i 的類型是位置的,類似java中的 Object,在koltion中叫做 Any,這時候,when 的判斷類型就多了n中變化,比如

    fun test7() {
        val i: Any = 5
        when (i) {
            1 -> print("i == 1")
            2 -> print("i == 2")
            is String -> print("i is String")
            in 6..9 -> print("i 在6和9的中間")
            else -> {
                print("i 不是 1 ,也不是 2")
            }
        }
    }

今天基本東西就是這些了,這些都是需要熟記的。

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