1. 程式人生 > >Kotlin學習(1)-資料型別

Kotlin學習(1)-資料型別

話不多說,先放一張圖

 再上程式碼:

package 資料型別

val aBoolean:Boolean=true

val mereInt=0b000000011
val anotherInt:Int=0xFF
val maxInt:Int =Int.MAX_VALUE
val minInt:Int =Int.MIN_VALUE

val aLong:Long=13435134124143

val another:Long=1231


val a:Float= Float.MIN_VALUE
val b:Float= Float.MAX_VALUE


val c:Double= Double.MIN_VALUE
val d:Double= Double.MAX_VALUE


val f:Byte= Byte.MIN_VALUE
val g:Byte= Byte.MAX_VALUE

val h:Char='資料型別.getA'

val string:String="Hs"
val fromChars:String= String(charArrayOf('H','s'))


fun main(args: Array<String>) {
    println(anotherInt)

    println(f)
    println(g)
    println(h)

    println(string == fromChars)
    println(string === fromChars)

    val arg1:Int=0
    val arg2:Int=1
    println("$arg1+$arg2=${arg1+arg2}")

    val sayHello:String="Hello \"Trump\"  \$"
    println(sayHello)

    val salary:Int=1000
    println("$$salary")


    val rawString:String="""
        \t
        \n
"""
    println(rawString.length)

}

tips:

(1)val表示常量,var表示變數

(2)==判斷值相等,===判斷引用相等

說一下陣列:

package 資料型別

val arrayOfInt:IntArray= intArrayOf(1,2,3,4)

val arrayOfChar:CharArray = charArrayOf('a','數','s','.','e')
val arrayOfString:Array<String> = arrayOf("我","是","pgg")
val arrayOfClass:Array<Parent> = arrayOf(Child(), Child())
fun main(args: Array<String>) {
    println(arrayOfInt.size)
    for (int in arrayOfInt){
        println(int)
    }

    println(arrayOfClass[1])
     println(arrayOfChar.joinToString(""))
    println(arrayOfInt.slice(1..2))

}

除了上面的,kotlin還有一些方便使用的資料型別:

(1)元組:二元,三元(kotlin元組似乎沒有python那麼複雜)

package 資料型別

fun main(args: Array<String>) {
    val t1=Triple(1,2,3)
    val t2=Pair(4,5)

    print("${t1.first}"+"${t2.first}")
}

(2)區間

package 資料型別

fun main(args: Array<String>) {
    val a_z='a'..'z'
    val one_100=1..100


    val d在其中='d' in a_z

    val 三十九在其中=39 in one_100

    //range
    val 倒計時=10.downTo(0)
    val 一百到兩百=100.rangeTo(200)
}

上面說的都比較簡單,其實和java比較像吧,接下來說的就是java中沒有的了,kotlin的空型別安全:

kotlin的空型別安全在我看來,其實也並不是說可以讓你的程式不報空指標錯誤,我覺得是在程式碼層面上提醒程式設計師需要注意可能會產生空指標錯誤,可能再我們平時使用java開發時,並不能將所有的可能會導致空指標異常的程式碼全部考慮到,並進行判空處理,在kotlin中,物件型別被分為可空和不可空兩種型別,比如說:

    var s:String="adsada"
    s=null

這裡會報錯,s是非空型別,不可以賦值為null,如果你想的話,可以:

    var s:String?="adsada"
    s=null

將s置為可空型別,也就是加一個?,這樣就不會報錯了,並且,如果你想要呼叫s的方法,也需要加上?,就像這樣:

var s:String?="adsada"
    s=null
    s?.length

?.是安全操作符,如果s不為null,那麼就返回s.length,如果s是null,那麼就會直接返回null,同時,如果只想對非空的值進行操作,那麼可以使用let高階函式,就像這樣:

 val listWithNulls: List<String?> = listOf("A", null)
    for (item in listWithNulls) {
        item?.let { println(it) } // 輸出 A 並忽略 null
    }

還有一個和java三目運算子有點像的操作符,Elvis 操作符

?: 左側表示式非空就返回左側表示式,否則就返回右側表示式:比如:

   val aa:String?="sdasda"
    val length = aa?.length ?: -1

那麼,介紹完上面的,可能會有疑惑,為什麼我說空型別安全避免不了空指標異常呢?因為有強制型別轉換!!,他是這麼使用的:

 val size=aa!!.length

這時如果aa是null的話,就會報空指標異常,所以!!需要慎用