1、声明一个不为空的变量

// 1、声明一个不为空的变量,不可被赋值为null,且有必要在后边初始化 by xiaojin on 7/24/21 9:32 PM
var na变量泵me:String
init {google
name = "Tom"
// 此时会变量是什么意思被提示  Null can not be a value of a non-null type String by xiGoaojin on 7/24/21变量值 9:33 PM
name = null
}

声明一个非空变量时,假定在定义时未初始化,则有必要在后边初始化,且不能被赋值为null

2、声明一个可为空变量
    // 2、声明一个可为空的变量 by xiaojin on 7/24/21 9:38 PM
var te变量名的命名规则l:String?
init {
// 可被赋值为null by xiaojin on 7/24/21 9:40 PM
tel = null
// 由于call方法需求的是String类型,但是tel其实是String?类型,所以需求用!!进行非空断言by xiaojin on变量之间的联系 7/24/21 9:42 PM
call(tel!!)kotlin下载
}
fun call(变量之间的联系num:String){
println("对 ${num} 拨号中...kotlin言语..")
}

一旦咱们这么做了,会导致程序溃散,即对一个值为null的变量运用了非空狗狗币断言时会抛出失常

Exception in threa宫颈癌早期症状d "main" kotlin.KotlinNullPointerEkotlin极简教程xception
at com.example.firstkotkotlin言语lin.kolkotlin实战tin.Null变量类型有哪些Type.<init>(NullType.kt:30)
at com.example.firstkotlin.狗狗币koltin.NullTypeK变量名的命名规则t.main(NullType.kt:45)
at com.example.firstkotlin.koltin.NullTypeKt.m安全教育ain(N变量泵ullType.kt)

所以咱们一般主张运用下面的方法

    // 2、声明安全期计算器一个可为空的变量 by xiaojin on 7/24/21 9变量值:38 PM
var tel:String?
init {
// 即可被赋值为null by xiaojin on 7/24/21 9:40 PM
tel = null
// 也可被赋值为详细安全教育的String值 by xiaojin on 7/24/21 9:40 PM
//        tel = "1234变量值567890"
// 咱们一般不主张运kotlin扩展函数用非空断言,由于它非常风险,一旦变量为null,则会抛出失常 by xiaojin on 7/24/21 9:44 PM
ckotlin为什么盛行不起来all(tel ?: "0")
}
fun call(num:kotlin和javaString){
println("对 ${num} 拨号中.....")
}

此时输出位:

对 0 拨号中.....

在此示例中,安全调用操作符(?:) 会查看其左面的值,假定他不为空,会回来他,假定为空,则会执行后边的操作。

3、当可空类型遇见val一起运用
// 3、当可空安全出产法类型和val一起运用 by xiaoji安全期是哪几天n on 7/24/21 9:56 PM
val address:String?
init {
address = null
if(address != null){
// 请注意此处的入变量与函数参,gGooHome需求的参数是String类型而不是S变量与函数tring?,说明在通过非空判断后,String?类型主动改变为了String类型 by xiaojin on 7/24/21 10:05 PM
goHome(address)
}
}
fun goHome(destination:String){
println("导航到 ${destination}")
}

这是一件很有意思的工作,被val修饰的可空类型,在通过非空变量名的命名规则判断后,去掉了公积金可空特点,这和val的特性有关,由于val一旦被赋值,就不可被批改。当然假定运用的是var批Kotlin改,是不可以的。