0 原文
https://www.runoob.com/kotlin/kotlin-basic-syntax.html
感觉这是 kotlin 的火星符号
Kotlin 空(NULL)检测机制,类似火星符号 ? !!
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理。
1. 类型后面加?表示可为空
正常的案例
var a: String? = null
if (a == null) {
println("a is null")
} else {
println(a)
}
运行结果:
a is null
错误的案例
var a: String = null
在编译的时候就会不过
Null can not be a value of a non-null type String
2. 变量后面加!!,可抛出控指针异常
fun main(args : Array<String>) {
val age = null
val ageInt = age!!.toInt()
println(ageInt)
}
运行效果
Exception in thread "main" kotlin.KotlinNullPointerException
at com.tct.freeze.kotlinstudydemo.MainRunKt.main(MainRun.kt:5)
3. 变量后面加?,不做处理返回 null
fun main(args : Array<String>) {
val age = null
val ageInt = age?.toInt()
println(ageInt)
}
运行结果
null
4. 返回值后面加?:,为空时返回
fun main(args : Array<String>) {
val age = null
val ageInt = age?.toInt() ?:-1
println(ageInt)
}
运行结果
-1
5. 当一个引用可能为 null 值时, 对应的类型声明必须明确地标记为可为 null
fun parseInt(str: String): Int? {
// ...
}