首先非空变量和可空变量的区别:
// name为不可为空的变量, 不能赋值为null ,若有判断 if(name==null) 无意义,因为肯定不为null var name : String = "" // role 为可空变量 var role : String? = ""
非空变量赋值为Null为报如下错误:
一、判断可空变量是否为null的方式
1、
var name : String ?= "" if (name == null){ Log.i(Tag,"name==null") }else{ Log.i(Tag, "name!=null") }
2、
?.的意思为若name为null 。则返回null
var name : String ?= "abc" Log.i(Tag,"name="+name?.length)
二、涉及到返回可空值的函数使用方法,在返回类型后同时加?
var name:String?="abc" fun getNameLength():String?{ return name }
三、let操作符
用法:变量?.let{ ... } , 作用为忽略null的情况
例如筛选出一个集合非空的元素集合
常规写法:
fun logUnNullList(arr:Array<String>):Unit{ for (item in arr){ if (arr==null){ continue }else{ Log.i(Tag,"非空元素为->"+item) } } }
用let操作符写法:
fun logUnNullList(arr:Array<String>):Unit{ for (item in arr){ item?.let {Log.i(Tag,"非空元素为->"+item) } } }