空安全场景下`?.method()`调用语法中`?`运算符的作用是什么?
Dart 空安全中
?.运算符?的作用 你代码里的hello?.toUpperCase()属于条件成员访问运算符的用法,其中?的作用如下:
- 首先会前置检查变量
hello的实际值是否为null - 若
hello不为null,正常执行后续的toUpperCase()方法调用,返回方法执行结果 - 若
hello为null,直接短路后续逻辑,返回null,不会触发空指针调用异常
对比参考:如果你直接写
hello.toUpperCase(),当hello为null时运行会直接抛出NoSuchMethodError错误,因为null类型没有实现toUpperCase方法。
和你已经了解的!断言运算符的差异是:!是强制认定变量不为空,哪怕实际为null也会强行调用后续方法,容易触发运行时异常;而?是安全的短路逻辑,不会抛出空相关异常。
内容的提问来源于stack exchange,提问作者dipansh
相关产品推荐
相关产品推荐

