Kotlin中?和!!的区别

 

简单点就是  

? 表示当前对象是否可以为空

!! 表示当前对象不为空的情况下执行

当然上面这两句话可能比较难理解 下面做下简单的分析

"?"加在变量名后,系统在任何情况不会报它的空指针异常。
"!!"加在变量名后,如果对象为null,那么系统一定会报异常! 

 

ArrayList myList = null;     //  创建一个null的队列

这段代码在执行的时候没有初始化会报空指针异常 这肯定毋庸置疑

在kotlin中 会这样写  ,在调用myList的时候在它后面加上一个问号myList?.size(),当myList为null的时候直接会打印List Size = null并不会有null异常出现。

但是 当你如果使用编译器自动转化的时候会自动加上!!

这是因为编译器在转化时为了保证代码转化前后的一致性所造成的。换句话说,在Java上出异常的,转化到KT上,编译器任然会让他保持抛出异常,NullPointerException也是如此。

所以可以看出,!!加上去后好像并没有和之前Java代码有什么区别嘛,该null的地方任然会抛出异常。所以大多数情况下都会使用?来检测null,轮不到!!出场。!!只会在你需要对某对象进行非空判断,并且需要抛出异常时才会使用到。

那么什么时候可以使用 ?

1在声明对象时,把它跟在类名后面,表示这个类允许为null;
2在调用对象时,把它跟在对象后面,表示如果为null程序就会视而不见。

 

总之  !!目的是明确区分“可空”与“不可空”。在kotlin中使用的更多的还是?

 

你可能感兴趣的:(kotlin,Android)