Kotlin入门:中?和!!的区别

本文深入探讨了Kotlin中处理空值的两种方法:?和!!的使用场景与区别。?用于安全地调用可能为null的对象,避免空指针异常;!!则用于强制转换非空,若对象为null则抛出异常。文章通过实例展示了如何在声明和调用对象时应用这两种操作符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

简单点就是  

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

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

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

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

 

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

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

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

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

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

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

那么什么时候可以使用 ?

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

 

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值