kotlin类型可为空,进行空安全的区别

定义一个可为空的变量b(String?),默认没有?是不可以为空的

java 复制代码
var b: String? = "Kotlin"
b = null
print(b)
// 输出 null

默认不可为空

java 复制代码
var a: String = "Kotlin"
a = null
// 编译器报错,null 不能被赋给不为空的变量

空安全调用(a?),相当于进行了判空操作

java 复制代码
var a: String? = "Kotlin"
print(a.length) // 编译器报错,因为 a 是可为空的类型
a = null
print(a?.length) // 使用?. 的方式调用,输出 null

T 代表不可为空类型,编译器会检查,保证不会被 null 赋值

T? 代表可能为空类型

不能将 T? 赋值给 T

使用 instance?.fun() 进行空安全调用