当前位置:嗨网首页>书籍在线阅读

37-可空类型与不可空类型

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.10.1 可空类型与不可空类型

Kotlin类型系统旨在从代码层面上消除NullPointerException,为了实现这一目标,它将可空类型和不可空类型进行了明确的区分,Kotlin中绝大部分的对象都是不可空类型。例如,String类型的常规变量不能容纳null。

var a: String = "abc"
a = null    //编译错误

如果允许为空,则可以将变量声明为可空字符串:String?。

var b: String? = "abc"
b = null    //编译通过

此时,如果直接调用变量a的方法或者访问它的属性,是不产生NPE的。

val l = a.length   //编译通过,因为a.length不会产生NPE

对于不可空类型,可以直接调用它的成员变量或者函数,但是对于可空类型,直接调用它的成员变量或者函数将会导致编译不通过。

val l = b.length    //编译错误,因为b可能为null

对此,Kotlin提供了一种安全的可空引用操作符(?.)。

var b: String? = "abc"
b?.length     // 编译通过,输出3