一、?

1)、?在声明对象时,把它跟在类名后面,表示这个类允许为null

var list: ArrayList<String>? = null

2)、调用对象时,把它跟在对象后面,表示如果为null程序就会视而不见,比如我们代码如下

list?.size

这里就算是list为null,也不会抛出空指针异常,

3)、对象A?:对象B

var size = list?.size? : 0

 如果size不为空就取size的值,如果是空的话就取0,等价三元操作符

int size = list.size != 0? size : 0 

 

 

二、 !!解释

"!!"加在变量名后,如果对象为null,那么系统一定会报异常!