Kotlin中變量、常量以及空安全

Kotlin的可空類型

在以往的Java開發中有一個著名的異常NullPointerException,俗稱NPE,它由訪問爲空的屬性引發,爲此Kotlin中引入了可空類型,旨在有效消除NPE異常的發生。

在定義變量的時候在其類型的後面加上一個?問號表示該變量是可空類型,可以賦予其null值。比如

//定義可空變量,並賦予null值
var a: String?
a = null
    
//定義一個非空變量,賦予null值的發生錯誤
var b: String
b = null // Null can not be a value of a non-null type String

可空類型的特點

  • 可空類型變量可以存放null值。
  • 可空類型變量不能賦值爲不可空變量,包括非空類型的形參
  • 不能直接調用可空類型的方法和屬性

安全調用可空類型: ?.

創建一個var a: String? = "abc"創建了一個可空的字符串類型變量a
那麼調用變量a的方法前需要判斷其是否爲null,比如使用if…else判斷
println(if(a != null) a.toUpperCase() else a)

在Kotlin中提供了一個非常方便的語法糖,可以將上面的if…else語句,使用?.
比如println(a?.toUpperCase())

Elvis運算符:?:

看一個Elvis運算符的例子:

//定義一個字符串變量a,如果不爲空輸出其值,如果爲空輸出“aa”
var a: String? = "a"
val b = "aa"
println(a?:b) //輸出爲a
a = null
println(a?:b) //輸出爲aa

通過上面的例子可以看出Elvis運算符的函數就是當變量a不爲空,表達式的值就是a,如果爲空表達式的值就是b

非空斷言:!! 操作符

可空類型的變量不能直接調用,一般要麼進行if…else判斷,要麼使用?.操作符進行安全調用,除此以外
Kotlin中提供了!!操作符,將一切可空的值轉換爲不可空的值,從而直接調用變量的方法和屬性,
如果可控變量的值爲null,將發生NPE異常。

參考

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