符号一:?
声明一个变量可为空。
var userData : UserData? = null
符号二:?.
表示这个变量可以为null。该变量如果为null时,不会执行该变量后面的逻辑,也不会抛出空指针异常,俗称空安全。如果不为null,会正常执行该变量后面的内容。
UserData?.name
符号三:!!
非空断言运算符
加在变量后面,表示该变量如果为null时,会抛出空指针异常,像java语法一样空指针不安全;如果不为null,才会正常执行该变量后面的内容。
UserData!!.name
符号四:?:
Elvis操作符:
A ?: B 如果A 的值为空,则会返回B。一般不推荐用!!,建议使用?:来规避崩溃、报错的发生
println(UserData ?: "当UserData为空时执行")
符号五:::
Kotlin 中 双冒号操作符
表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。
class ColonMagic {
fun main(msg: Array<String>) {
//调用peopleDo方法,并传入参数 “I say !” 和 say方法体
//此处 ::say 是将say方法作为参数传入peopleDo方法
//此处只是将say作为参数,而不会调用say方法,也就不会println(message),不会输出日志
peopleDo("I say !", ::say)
}
/**
* 一个参数
* message:String类型
*/
private fun say(message: String) {
println(message)
}
/**
* 两个参数
* msg: String类型
* dosay: (String) -> Unit 一个参数为String不需要返回值的方法体
*/
private fun peopleDo(msg: String, doSay: (String) -> Unit) {
//doSay(msg)调用的就是传入的say方法,即say(msg),只不过参数名是doSay本质是say方法
//此处打印出来 I say ! 日志
doSay(msg)
}
}
符号六:===
=
就是赋值,
==
相当于Java中的equls()用于比较对象的结构(内容)是否相等(对象的结构就是属性和方法),
===
用于比较对象的引用是否指向同一个对象,运行时如果是基本数据类型===
等价于==
符号七:…
range表达式 表示多少到多少之间
if(num in 10..100)//表示10..100 表示 10到100
符号八:``
反引号
1、Kotlin中可以用反引号解决关键字冲突问题
2、将一个不合法的字符变为合法字符,这种情况一般可以用在一个Kotlin方法不希望被Java调用时使用,因为Java语言层面上不支持反引号这种语法。
fun `is`(){
//用is这种关键字去命名函数
}
fun `哈哈哈哈`(){
//用中文这种不合法字符去命名函数
}
符号九:$
拼接符号
"货号 ${data.code}" //将data.code值拼接到货号后
//相当于java中
"货号" + data.code
符号十:@
1、限定this的类型
class User {
inner class State{
fun getUser(): User{
//返回User
return this@User
}
fun getState(): State{
//返回State
return this@State
}
}
}
2、跳转到指定标签处,可以直接跳出多层循环。像汇编语言中的Loop
loop@ for (itemA in arraysA) { //直接跳出双循环
var i : Int = 0
for (itemB in arraysB) {
i++
if (itemB > 2) {
break@loop
}
println("itemB:$itemB")
}
}```