定义
一个变量类型可空,则该变量可以被赋值为null
。定义可空变量,需要指定变量类型为类型?
:
fun main() {
var nullableInt: Int? = 1
nullableInt = null
print(nullableInt)
}
null
null 判定
判断值是否为 null
使用==
判断变量是否为null
:
fun main() {
var nullableString: String? = null
print(nullableString == null)
}
true
安全调用:?
当我们想调用可空类型的属性(变量)或方法(函数)时,我们可以使用?
,整体的值会是一个可空的类型(比如下方array?.size
是Int?
类型):
fun main() {
var array: Array<Int>? = null
println(array?.size)
array = arrayOf(1, 2, 3)
print(array?.size)
}
null
3
为空替换:?:
使用?:
语句。例如下方的notNullString
我想赋nullableString
的值,但又不想它为空,可以使用?:
,当nullableString
为空时,它会使用NotNull
替换。
如果不想让上方提到的array?.size
为可空,可以配合使用:array?.size ?: -1
,这样它就是Int
类型,当array
为null
时,array?.size ?: -1
值为-1
.
fun main() {
var nullableString: String? = null
val notNullString: String = nullableString ?: "NotNull"
// val notNullString: String = if(nullableString == null) "NotNull" else nullableString
println(notNullString)
}
NotNull
不为空断言:!!
使用!!
强调值不为null
。当某个变量一定不为空,但编辑器却提示为可空时,我们可以这样使用(此时size
为非可空Int
):
fun main() {
var array: Array<Int>? = arrayOf(1, 2)
val size: Int = array!!.size
}
Note:请谨慎使用
!!
断言,如果变量的值为空,会抛出空指针异常java.lang.NullPointerException
。
类型转换不抛异常:as?
直接使用as
进行类型转换,如果转换不成功会抛出java.lang.ClassCastException
,要避免这一情况可以使用as?
,它会在转换不成功时给出null
。
fun main() {
var string = "10"
// val int = string as Int
val int: Int? = string as? Int
print(int)
}
null