變量能夠接受null值,須要用?修飾java
var a: String = "abc"
a = null // 編譯錯誤
若是咱們定義的變量是一個能夠爲空的類型,則要用String?
var b: String? = "abc"
b = null // 編譯經過
複製代碼
若是咱們要獲取字符串b的長度,則調用b.length,這時候編譯器會報錯安全
val l = b.length // 錯誤:變量「b」可能爲空
val l = b?.length//ok,若是 b 非空,就返回 b.length,不然返回 null,{: .keyword },這個表達式的類型是 Int?。
複製代碼
對於上面的例子,在開發中咱們常常的操做是,當b不爲空時,咱們返回另外一個值y,當b爲空時,咱們返回一個值x,而不是null, 這樣就用到Elvis操做符函數
val l = b?.length?:-1//當b不爲空時,返回b.length,當b爲空時,返回-1
複製代碼
若是我傳的b爲空,我但願系統直接給我拋出個NPE異常,就會用到!!操做符ui
val l = b!!.length//若是b不爲空,則返回b.length,若是b爲空,則拋出異常NullPointerException
複製代碼
若是你有一個可空類型元素的集合,而且想要過濾非空元素,你可使用 filterNotNull 來實現this
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()
複製代碼
這個特別簡單,也很好用,舉個例子,開發中咱們會常去拼接請求的urlurl
------------java------------
String baseUrl = "http://www.baidu.com/"
String imageUrl = baseUrl+"?page=1&size=10"//固然這些數字不能寫死,通常咱們都是添加在FormBody中的
------------kotlin-------------
val imageUrl = "$baseUrl?page=$page&size=$size"
複製代碼
==判斷值是否相等,===判斷值及引用是否徹底相等。spa
val num: Int = 128;
val a:Int? = num
val b:Int? = num
println(a == b) //true
print(a === b) //true
複製代碼
區間(或叫做範圍)表達式由具備操做符形式 .. 的 rangeTo 函數輔以 in 和 !in造成。code
if (i in 1..10) { // 等同於 1 <= i && i <= 10
println(i)
}
//使用until函數,建立一個不包括其結束元素的區間
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}
//若是你想倒序迭代數字呢?也很簡單。你可使用標準庫中定義的 downTo() 函數
for (i in 4 downTo 1) print(i) // 輸出「4321」
//可否以不等於 1 的任意步長迭代數字? 固然沒問題, step() 函數有助於此
for (i in 1..4 step 2) print(i) // 輸出「13」
for (i in 4 downTo 1 step 2) print(i) // 輸出「42」
複製代碼
data class Book(var id: Int, var name: String)
Book聲明瞭 id,name兩個變量。解構時若是隻須要id這一個變量時
val book = Book(1, "英語")
val (id, _) = book
複製代碼
//獲得類的Class對象
startActivity(Intent(this@KotlinActivity, MainActivity::class.java))
複製代碼