
【?可空类型】
变量可以接受null值,需要用?修饰
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?。
【?:Elvis 操作符】
对于上面的例子,在开发中我们经常的操作是,当b不为空时,我们返回另一个值y,当b为空时,我们返回一个值x,而不是null, 这样就用到Elvis操作符
val l = b?.length?:-1//当b不为空时,返回b.length,当b为空时,返回-1
【!!操作符】
如果我传的b为空,我希望系统直接给我抛出个NPE异常,就会用到!!操作符
val l = b!!.length//如果b不为空,则返回b.length,如果b为空,则抛出异常NullPointerException
【filterNotNull】
如果你有一个可空类型元素的集合,并且想要过滤非空元素,你可以使用 filterNotNull 来实现
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()
【$符号】
这个特别简单,也很好用,举个例子,开发中我们会常去拼接请求的url
------------java------------
String baseUrl = "http://www.baidu.com/"
String imageUrl = baseUrl+"?page=1&size=10"//当然这些数字不能写死,一般我们都是添加在FormBody中的
------------kotlin-------------
val imageUrl = "$baseUrl?page=$page&size=$size"
【==和===】
==判断值是否相等,===判断值及引用是否完全相等。
val num: Int = 128;
val a:Int? = num
val b:Int? = num
println(a == b) //true
print(a === b) //true
【..区间】
区间(或叫作范围)表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in形成。
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对象
//得到类的Class对象
startActivity(Intent(this@KotlinActivity, MainActivity::class.java))