Kotlin可空和非可空類型

Kotlin null安全性是一種消除代碼中空引用風險的過程。 如果Kotlin編譯器發現任何null參數而仍然執行null引用相關語句,則會立即拋出NullPointerException

Kotlin的類型系統旨在消除代碼中的NullPointerExceptionNullPointerException只能用於以下原因:

  • 強行調用拋出NullPointerException;
  • 未初始化此運算符,可在構造函數中傳遞並在某處使用。
  • 使用外部Java代碼作爲Kotlin,是Kotlin與Java互操作性。

Kotlin可空類型和非可空類型

Kotlin類型系統區分可以保持null(可空引用)和不能保持null(非null引用)的引用。 通常,String類型不可爲null。 要創建保存null值的字符串,必須通過放置一個?來明確定義它們。 例如,在String後面使用:String?

可空類型

通過放置一個?來聲明可空類型? 在String後面:

var str1: String? = "hello"  
str1 = null // ok

Kotlin可空類型的例子

fun main(args: Array<String>){  
    var str: String? = "Hello" // 變量被聲明爲可空
    str = null  
    print(str)  
}

執行上面示例代碼,得到以下結果 -

null

非可空類型

非可空類型是普通字符串,它們聲明爲String類型:

val str: String = null // compile error  
str = "hello" // compile error Val cannot be reassign  
var str2: String = "hello"  
str2 = null // compile error

null值賦給非可空字符串時會發生什麼?

fun main(args: Array<String>){  
    var str: String = "Hello"  
    str = null // compile error  
    print(str)  
}

它將生成編譯時錯誤,如下所示 -

Error:(3, 11) Kotlin: Null can not be a value of a non-null type String

在條件中檢查null

Kotlin的if表達式用於檢查條件並返回值。

fun main(args: Array<String>){
    var str: String? = "Hello"     // variable is declared as nullable
    var len = if(str!=null) str.length else -1
    println("str is : $str")
    println("str length is : $len")

    str = null
    println("str is : $str")
    len = if(str!=null) str.length else -1
    println("b length is : $len")
}

執行上面示例代碼,得到以下結果 -

str is : Hello
str length is : 5
str is : null
b length is : -1