声明 Non-Null 非空类型:在声明变量的时候,就要指定它是 Nullable可空类型 还是 Non-Null非空类型。默认为非空类型,即该变量不会为null,为null报错。
val a :String = "你好" val b :String = null //赋值为null报错:Null can not be a value of a non-null type String声明 Nullable 可空类型:
val c :String? = null val d = c //d的类型和c一样为 String?可空类型 不能直接赋值给 非空类型,也不能直接调用:
| ? | 变量类型后面加上?表示可为null,是可空类型 |
| ?. | 安全调用操作符,为null返回null,不为null正常调用 |
| ?: | Elvis操作符,左侧不为null执行左侧,否则执行右侧 |
| !! | 非空断言,主观认定不会为null的时候使用,为null报错 |
var a:String = "你好" val b: String? = null a = b //直接赋值报错:Type mismatch: inferred type is String? but String was expected a = if (b!= null) c else "还行" //一般写法:判断后赋值 a = b ?: "还行" //使用Elvis,左侧不为null执行左侧,为null执行右侧 a = b !! //使用 非空断言,主观认定不会为null的时候调用,为null会报错:NullPinterException println(b.length) //可空类型调用的时候要带上?,否则IDE直接提示错误 println(b?.length) //安全调用,c为null返回null,不为null正常调用。打印:null



