Dart语言中标识符前置与后置感叹号的作用差异是什么
Dart 两种感叹号用法的区别
这两种写法属于完全不同的语法特性,功能没有任何关联:
- 后缀感叹号
someVariable!:你理解的没错,这是Dart空安全体系提供的非空断言操作符。作用是强制将可空类型的表达式转换为对应的非空类型,相当于你向编译器保证该值此时绝对不为null。如果运行时实际值为null,会直接抛出_CastError异常。
示例代码:String? nullableStr = "hello"; String str = nullableStr!; // 编译运行正常,将String?转为String类型 - 前缀感叹号
!someVariable:这是通用的逻辑非操作符,和空安全无关,功能是对布尔值取反。注意该操作符只能作用于非空的bool类型,如果操作数是可空的bool?类型,直接使用会触发编译错误。
示例代码:bool isFinish = false; print(!isFinish); // 输出结果为 true
常见混淆场景提醒:如果你在代码中看到
!someVariable!的写法,本质是先执行后缀的非空断言拿到非空布尔值,再执行前缀的逻辑非取反,不要把两个感叹号的作用搞混。
内容的提问来源于stack exchange,提问作者someJoe121
相关产品推荐
相关产品推荐

